如何用 SQL 中的两个表替换值?

How to replace values with two tables in SQL?

假设,我有两个 HUGHE table:一个是商品 ID,例如 10、20 等,另一个是商品代码。目标是将所有商品 ID 替换为其对应的商品代码。

Table 1:

SELECT [customer]
      ,[item1]
      ,[item2]
      ,[item3]
      ,[item4]
FROM [StoreData].[dbo].[Customer]
customer item1 item2 item3 item4
1 10 NULL 20 30
2 NULL NULL 45 35
3 12 NULL 22 67
4 57 22 20 NULL

Table 2:

SELECT [item]
      ,[code]
FROM [StoreData].[dbo].[ItemCode]
item code
10 1000
20 1000
30 1000
12 1500
22 1500
33 1500
35 2000
45 2000
57 2300
67 2300

最终table需要

customer item1 item2 item3 item4
1 1000 NULL 1000 1000
2 NULL NULL 2000 2000
3 1500 NULL 1500 2300
4 2300 1500 10000 NULL

有很多项目(> 1M 行)。因此,无法手动将它们一一重新标记。我们怎样才能自动做到这一点?非常感谢

这就是 JOINs 存在的原因:

SELECT 
    c.[customer],
    ic1.code Item1,
    ic2.code Item2,
    ic3.code Item3,
    ic4.code Item4
FROM [StoreData].[dbo].[Customer] c
LEFT JOIN [StoreData].[dbo].[ItemCode] ic1
    ON c.item1 = ic1.item
LEFT JOIN [StoreData].[dbo].[ItemCode] ic2
    ON c.item2 = ic2.item
LEFT JOIN [StoreData].[dbo].[ItemCode] ic3
    ON c.item3 = ic3.item
LEFT JOIN [StoreData].[dbo].[ItemCode] ic4
    ON c.item4 = ic4.item
;

您可以在 items

上尝试聚合条件函数 INNER JOIN
SELECT t1.customer,
       MAX(CASE WHEN t1.item1 = t2.item THEN t2.code END) item1,
       MAX(CASE WHEN t1.item2 = t2.item THEN t2.code END) item2,
       MAX(CASE WHEN t1.item3 = t2.item THEN t2.code END) item3 ,
       MAX(CASE WHEN t1.item4 = t2.item THEN t2.code END) item4
FROM [Customer] t1
INNER JOIN [ItemCode] t2
ON t2.item IN (t1.item1,t1.item2,t1.item3,t1.item4)
GROUP BY t1.customer

SQLFIDDLE