【问题标题】:Join two tables and show null in result set if match not found between joined tables in SQL如果在 SQL 中的连接表之间找不到匹配项,则连接两个表并在结果集中显示 null
【发布时间】:2021-09-24 11:58:27
【问题描述】:

我的表结构如下:

表 A:

AID       AName
1         AAA
2         BBB 

表 B:

BID       AID    
10         1      
10         2    
11         2  

在表 B 中,AID 是表 A 主键的外键。BID 10 属于 AID 1 和 AID 2,BID 11 仅属于 AID 2 而不是 AID 1。我需要这样的结果:

预期结果:

BID    AID    AName
10       1    AAA 
10       2    BBB
Null     1    AAA
11       2    BBB

表 A 是基表。由于在表 B 中,对于 BID 11,它没有 AID 1 的记录,因此新结果集应该返回 NUll。 我无法使用连接来完成它。我怎样才能实现它?

【问题讨论】:

  • TableB 看起来像是 TableA 和其他表之间的多对多连接表,BID 应该是这个其他表的外键。那张桌子在哪里?

标签: sql-server database tsql join left-join


【解决方案1】:

您需要将TableACROSS 加入TableB 的不同BIDs 以获得AIDBID 的所有组合,然后将LEFT 加入TableB

SELECT b.BID, a.AID, a.AName
FROM TableA a CROSS JOIN (SELECT DISTINCT BID FROM TableB) t
LEFT JOIN TableB b ON b.BID = t.BID AND b.AID = a.AID
ORDER BY t.BID, a.AID

请参阅demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    相关资源
    最近更新 更多