我有一个像这样的大表(主表)
person_id fee ref_id <otherfields>
1 foo 23
1 bar null
1 abc 23
2 xyz 34
我需要检索的 ref_id 的许多值都是 null。顺便说一句,我需要选择,而不是更新。 我还有另外两个表 d1、d2,其中包含必要的缺失 ref_id(以及不同的字段),并且可以使用 person_id 引用它们。 person_id 可能不存在于其中一个表中(例如,它可能不在 d1 中,但在 d2 中)
我可以使用其中一个表填写一些 ref_id,但是如何使用另一个表来检索剩余空值的值?联盟对我来说听起来不错吗?但我正在努力解决这个问题,因为它给了我比原来更多的行,这是不对的。
SQL Server 2008
编辑:d1,d2 具有相同的 (person_id,ref_id) 元组
最佳答案
您想要加入,并且可能想要使用COALESCE
,例如:
SELECT person_id, fee,
COALESCE (m.ref_id, d1.ref_id, d2.ref_id) as 'ref_id',
...
FROM table t
LEFT JOIN d1
ON d1.person_id = t.person_id
LEFT JOIN d2
ON d2.person_id = t.person_id
WHERE ...
这将为您提供这 3 个表中 ref_id 的第一个非 NULL
值。
编辑:
为了澄清您的想法,UNION
垂直连接数据集或表,如下所示
SELECT 1,2,3
UNION
SELECT 4,5,6
给你
1,2,3
4,5,6
JOIN
按行连接表,将一个表中的行链接到另一个表中的行,以使用两个表中的值“扩展”该行。
关于sql - 从两个不同的表获取空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5343920/