我想从表C中选择A列“item_a_id”和B列“item_b_id”不在另一个查询结果中的所有项目ID。
目前我使用这个查询两次,我没有找到一种方法,如何查询它,而不使用相同的查询两次。
这是我的疑问:
SELECT * from table_c c
WHERE c.item_a_id NOT IN
(
SELECT a.item_id,b.item_id
FROM table_a a
JOIN table_b b on a.item_id = b.item_id
)
AND c.item_b_id NOT IN
(
SELECT a.item_id,b.item_id
FROM table_a a
JOIN table_b b on a.item_id = b.item_id
)
而这就是我想要改进它的方式(ofc这不是sql语法,只是一个例子)
SELECT * from table_c c
WHERE c.item_a_id AND c.item_b_id NOT IN
(
SELECT a.item_id,b.item_id
FROM table_a a
JOIN table_b b on a.item_id = b.item_id
)
2条答案
按热度按时间6jygbczu1#
您需要将左手的列括在括号中:
但通常NOT EXISTS条件比NOT IN条件更快
uxhixvfz2#
如果我理解正确的话,您应该能够对A表和B表执行两个连续的左连接,那么有效的匹配就是两个表都没有任何连接匹配的匹配。
顺便说一下,上面的查询专门称为左反连接。