https://i.stack.imgur.com/oEEDZ.png
SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL
https://i.stack.imgur.com/pxUO3.png
来自文章:http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx
SELECT
*
FROM
primarytable P
WHERE
NOT EXISTS (SELECT * FROM secondarytable S
WHERE
P.PKCol = S.FKCol)
通常,(NOT) EXISTS
是比 (NOT) IN
或 (LEFT) JOIN
更好的选择
LEFT JOIN
优于 NOT EXIST
使用“不存在”左连接:
SELECT p.*
FROM primary_table p LEFT JOIN second s ON p.ID = s.ID
WHERE s.ID IS NULL
另一种解决方案是:
SELECT * FROM TABLE1 WHERE id NOT IN (SELECT id FROM TABLE2)
SELECT P.*
FROM primary_table P
LEFT JOIN secondary_table S on P.id = S.p_id
WHERE S.p_id IS NULL
P.key = S.key
然后说 where S.key IS NULL
,那么这不会使 P.key 也为 null 吗?
如果要从“第一表”中选择第二个表中也存在的列,那么在这种情况下,您也可以使用 EXCEPT
。在这种情况下,列名也可以不同,但数据类型应该相同。
例子:
select ID, FName
from FirstTable
EXCEPT
select ID, SName
from SecondTable
这有助于在 COGNOS 中使用,因为允许在 Cognos 中创建 SQL“Not in”语句,但运行时间太长。我已经手动将表 A 编码为在 Cognos 中作为 A.key“不在”B.key 中加入表 B,但是查询花费的时间太长/5 分钟后没有返回结果。
对于在 Cognos 中寻找“NOT IN”解决方案的其他任何人,这就是我所做的。通过选择链接类型在 Cognos 中创建一个使用 LEFT JOIN 连接表 A 和 B 的查询:表 A.Key 在表 B 中具有“0 到 N”值,然后为表 B 添加了一个过滤器(这些对应于 Where 子句) .Key 为 NULL。
跑得很快,就像一个魅力。
不定期副业成功案例分享
B.Key IS NULL
但我们仍然可以比较A.Key = B.Key
?