将列中的值Map到sql中的值

r6vfmomb  于 2021-06-17  发布在  Mysql
关注(0)|答案(3)|浏览(603)

我想用sql中相应的值替换某些值。我无法创建交叉引用表。这些值可以在我的应用程序的“txt”或“properties”文件中指定
我看着 CASE 但我有200个替代品 CASE 这是不够的

SELECT dummy FROM TestTable;

如果我得到 LOT_NUMBER 我想把它换成 Lot Number 或者如果我得到 LOT_NUMBER_XREF 我想把它换成 Lot Number Cross-Reference ```
dummy
LOT_NUMBER
LOT_NUMBER_XREF

替换为

dummy
Lot Number
Lot Number Cross-Reference

eaf3rand

eaf3rand1#

如果有许多不同的值要替换,则应该创建一个表来存储旧值到新值的Map。然后可以在查询中联接该表。
下面的sql将旧值替换为新值(如果未定义转换,则保持原样):

SELECT 
    COALESCE(m.new_value, t.value)
FROM 
    table t
    LEFT JOIN mapping_table m 
        ON t.value = m.old_value

对于要转换的有限数量的值,可以使用大小写。或者是有工会的cte:

WITH mapping_table AS (
    SELECT 'LOT_NUMBER' AS old_value, 'Lot Number' AS new_value
    SELECT 'LOT_NUMBER_XREF', 'Lot Number Cross-Reference'
)
SELECT 
    COALESCE(m.new_value, t.value)
FROM 
    table t
    LEFT JOIN mapping_table m 
        ON t.value = m.old_value
6ovsh4lw

6ovsh4lw2#

如果您不能使用交叉引用表,请使用(您必须在应用程序中生成)子查询或cte!cte:

with mapping as (
 select 'LOT_NUMBER' as old_value, 'Lot Number' as new_value
 union all select 'LOT_NUMBER_XREF', 'Lot Number Cross-Reference'
)
select 
 t.value,
 coalesce(m.new_value, 'none') as new_value
from tbl_your_table t
left join mapping m on t.value = m.old_value

或子查询:

select 
 t.value,
 coalesce(m.new_value, 'none') as new_value
from tbl_your_table t
left join (
 select 'LOT_NUMBER' as old_value, 'Lot Number' as new_value
 union all select 'LOT_NUMBER_XREF', 'Lot Number Cross-Reference'
) m on t.value = m.old_value
cotxawn7

cotxawn73#

如果你有像 _ 那么你能做的就是 LIKE 操作员和

SELECT replace(dummy,'_',' ') from table where 
             dummy like '%_%'   -- check generic regex

然后,使用 CASE WHEN 最重要的是
DUMMY IN(X,REF) Then REPLACE(DUMMY,'X',CROSS) 同样,对于其他人,这也将减少案件的数量。
问题是只需检查泛化的术语和它们的替换项就可以存储它 IN 对最一般的条款进行预过滤。如果计数仍然很大,则需要一个临时表来查找引用,就像其他编程语言中的数组一样

相关问题