完全困惑,我已经为此工作了 2 个小时
我认为对连接左侧的限制受到尊重
在此查询中,我得到 [docSVsys].[visibility] 1 和 <> 1
我认为这会将 [docSVsys].[visibility] 限制为 1
select top 1000
[docSVsys].[sID], [docSVsys].[visibility]
,[Table].[sID],[Table].[enumID],[Table].[valueID]
from [docSVsys] with (nolock)
left Join [DocMVenum1] as [Table] with (nolock)
on [docSVsys].[visibility] in (1)
and [Table].[sID] = [docSVsys].[sID]
and [Table].[enumID] = '140'
and [Table].[valueID] in (1,7)
这有效
select top 1000
[docSVsys].[sID], [docSVsys].[visibility]
,[Table].[sID],[Table].[enumID],[Table].[valueID]
from [docSVsys] with (nolock)
left Join [DocMVenum1] as [Table] with (nolock)
on [Table].[sID] = [docSVsys].[sID]
and [Table].[enumID] = '140'
and [Table].[valueID] in (1,7)
where [docSVsys].[visibility] in (1)
我只是度过了一个真正的休息日,因为我心里想着左侧很荣幸加入
最佳答案
SELECT *
FROM A
LEFT JOIN B ON Condition
相当于
SELECT *
FROM A
CROSS JOIN B
WHERE Condition
UNION ALL
SELECT A.*, NULL AS B
FROM A
WHERE NOT EXISTS (SELECT * FROM B WHERE Condition)
一些粗略的伪代码...
请注意,A 中的所有行都会通过。只是如果 A
的某些特定行的连接失败,B
中的列可能为 NULL
。
将 docSVsys
上的过滤器放入 WHERE
子句中。
关于t-sql - 左连接没有达到我的预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24746244/