首页 > 解决方案 > 如何将id交叉引用到sql中的另一列?

问题描述

表A

鉴于上面显示的表格,我需要做的是,如果特定 ID 的 COUNTRY 字段为 NULL,则选择相应的 UNDERLYING_ID,并将其交叉引用到 ID 列并从 UNDERLYING_ID 匹配的行中选择 COUNTRY 值身份证。

因此,在这种情况下,A701 的国家/地区值将为 JAP,因为基础 ID A706 在 ID 列(最后一条记录)中有匹配项

不知道如何在这里编写查询。请指教。

标签: sqlsql-server

解决方案


根据您关于“NULL”国家/地区值不需要多级查找的声明,我认为CASE语句中的子选择非常适合这种数据模式,并且在类似情况下使用过它。

就像是:

SELECT
    CASE WHEN COUNTRY IS NOT NULL THEN COUNTRY
       ELSE ( SELECT T2.COUNTRY FROM [TABLE NAME] T2 WHERE T2.ID = T.UNDERLYING_ID )
       END AS Country
FROM [TABLE NAME] T

引擎很可能会将其转换为左连接,因此它的性能与@Cetin 的答案相同,但在我看来,这是一个更具可读性的解决方案。

如果您想用特定值替换 NULL 值,您可以使用COALESCE它,例如:

SELECT
    COALESCE(
        CASE WHEN COUNTRY IS NOT NULL THEN COUNTRY
        ELSE ( SELECT T2.COUNTRY FROM [TABLE NAME] T2 WHERE T2.ID = T.UNDERLYING_ID )
        END, 
        '(ReplacementValue)') AS Country
FROM [TABLE NAME] T

推荐阅读