【问题标题】:SQL joining with empty table with "Not Equal To" operator使用“不等于”运算符与空表连接的 SQL
【发布时间】:2013-04-09 13:31:38
【问题描述】:
我有两张桌子 T1 和 T2
T1 列 id 和数据
具有列 id 和 T1_id 的 T2
我想加入 T1.id 和 T2.T1_id
我想要 T1 的所有记录,其 id 不存在于 T2 中
即,T1.id T2.T1_id
所以如果 T2 为空,则应获取 T1 的所有记录
问题是
- 如果我使用 LEFT 连接 den 会获取所有 T1 id 的记录,即使
T2 中存在对应 T1_id 的记录。
- 如果我不使用左连接,除非 T2 为空,否则一切正常,则不会获取任何记录
我也喜欢 linq 等价物。
【问题讨论】:
标签:
c#
sql
sql-server
join
【解决方案1】:
你已经接近你想要的了。 LEFT JOIN 就足够了,您的语句中唯一缺少的是 WHERE 子句条件。
SELECT a.*
FROM T1 a
LEFT JOIN T2 b
ON a.ID = b.T1_ID
WHERE b.T1_ID IS NULL
这是LINQ 版本:
var _result = from a in T1
join b in T2 on a.ID equals b.T1_ID into b_join
from b in b_join.DefaultIfEmpty()
where b.T1_ID == null
select a;