Sql COALESCE整行?

Lev*_*kon 5 sql

我刚刚了解了COALESCE,我想知道是否可以在两个表之间COALESCE整行数据?如果没有,对于以下随机播放的最佳方法是什么?

例如,我有这两个表并假设所有列都匹配:

tbl_Employees

Id     Name     Email     Etc
-----------------------------------
1      Sue      ...       ...  
2      Rick     ...       ...  
Run Code Online (Sandbox Code Playgroud)

tbl_Customers

Id     Name     Email     Etc
-----------------------------------
1      Bob      ...       ...  
2      Dan      ...       ...  
3      Mary     ...       ... 
Run Code Online (Sandbox Code Playgroud)

和一个id为id的表:

tbl_PeopleInCompany

Id     CompanyId 
-----------------
1      1
2      1
3      1
Run Code Online (Sandbox Code Playgroud)

我想以一种方式查询数据,从第一个表中获取匹配id的行,但如果没有找到id,则从第二个表获取.

因此生成的查询看起来像:

Id     Name     Email     Etc
-----------------------------------
1      Sue      ...       ...  
2      Rick     ...       ...  
3      Mary     ...       ... 
Run Code Online (Sandbox Code Playgroud)

Sue和Rick从第一张桌子中取出,Mary从第二张桌子上取下.

Lar*_*tig 7

 SELECT Id, Name, Email, Etc FROM tbl_Employees
      WHERE Id IN (SELECT ID From tbl_PeopleInID)
 UNION ALL
 SELECT Id, Name, Email, Etc FROM tbl_Customers
      WHERE Id IN (SELECT ID From tbl_PeopleInID) AND
            Id NOT IN (SELECT Id FROM tbl_Employees)
Run Code Online (Sandbox Code Playgroud)

根据行数的不同,有几种不同的方法可以编写这些查询(使用JOIN和EXISTS),但首先尝试一下.

此查询首先从目标列表中具有Id值的tbl_Employees中选择所有人(表tbl_PeopleInID).然后它将第二个查询的结果添加到这一行的"底部".第二个查询获取目标列表中包含Ids的所有tbl_Customer行,但不包括任何出现在tbl_Employees中的ID.

总列表包含您想要的人 - 来自tbl_PeopleInID的所有ID,优先考虑员工,但缺少从客户提取的记录.