sql - 从两个不同的表获取空值?

标签 sql sql-server-2008 union

我有一个像这样的大表(主表)

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/

相关文章:

c# - 如何检查 SqlConnection 中使用的 SQL Server 端 SSL 证书?

MySQL 在一个表上合并两个带有 CASE 的 SELECT 查询

java - Hql查询类似于hibernate中的SaveOrUpdate

sql - 将 uniqueidentifier 类型转换为字符串

sql - SQL中如何选择至少有N个相似外键的文档

sql - 如何使用加权子选择正确执行 SQL UPDATE?

sql-server - 试图以访问权限禁止的方式访问套接字

c# - 在 nhibernate 标准中使用内置 sql "Convert"函数

MySQL为内连接UNION右连接创建表

sql - Union All 但只保留 T-SQL 中一个表中的重复项