sql - 如何将id交叉引用到sql中的另一列?
问题描述
鉴于上面显示的表格,我需要做的是,如果特定 ID 的 COUNTRY 字段为 NULL,则选择相应的 UNDERLYING_ID,并将其交叉引用到 ID 列并从 UNDERLYING_ID 匹配的行中选择 COUNTRY 值身份证。
因此,在这种情况下,A701 的国家/地区值将为 JAP,因为基础 ID A706 在 ID 列(最后一条记录)中有匹配项
不知道如何在这里编写查询。请指教。
解决方案
根据您关于“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
推荐阅读
- javascript - 如何获取数组内部的数组名称?
- python - PYTHON:如果过了几秒钟,如何让程序停止?
- python - 如何以可编辑格式打开详细视图,如管理页面所示?
- laravel - 无法运行 Composer 更新和安装命令
- powershell - Powershell 获取当前的 DOMAIN OR COMPUTER NAME\USER 以及两者的区别
- javascript - 如何使用 lodash _groupBy
- python - 如何使用Python重新排列字符串的字符,使其相邻的字符都不相同
- javascript - 使用 jQuery 函数延迟 MathJax
- google-sheets - 根据不同列中逗号分隔列表中的匹配 ID 连接 ID 列表
- android - 使用计时器使用 Volley 时出现内存不足错误