【发布时间】:2018-01-19 17:42:11
【问题描述】:
我有这个问题
SELECT DISTINCT IP.IRId
FROM cmp.NPTable NP
INNER JOIN IPTable IP ON IP.IPtId = NP.IPd
LEFT JOIN IPCTable IPC ON IPC.IPId = NP.IPId
WHERE NP.PCN Id = @PCNId
AND (IP.IsCompliant = 1 AND IPC.CheckId = 1) OR (IP.IsCompliant = 0 AND IPC.CheckId = 1)
这不能正常工作
IPTable 要么 IsCompliant = null, 0 要么 1 -- 这基本上是为了指示真或假 IPC.CheckId 为 1 或 2 -- 这是此表中的主 ID
唯一的匹配整数匹配是两个表之间的值 1。
如果 IsCompliant = 1 和 CheckId = 1,我只想恢复行 否则,如果 IsCompliant 为 null 或 0,则 CheckId = 2。
我添加到 where 的子句是 AND (IP.IsCompliant = 1 AND IPC.CheckId = 1) OR (IP.IsCompliant = 0 AND IPC.CheckId = 1)
这不起作用。帮助。将不胜感激。
谢谢
【问题讨论】:
-
这里没有使用
LEFT JOIN。你的WHERE子句将你的LEFT JOIN变成INNER JOIN。 -
嗨。左连接返回内连接行加上由空值扩展的不匹配的左表行。由于您删除了 where 中所有以空值扩展的左连接行,因此您的查询没有意义。现在:你想要什么行?你不清楚。你说“我只想带回行 [...]”但是来自哪个表/子查询?
标签: sql left-join inner-join