selectNOT IN多列
我需要实现以下查询
SELECT * FROM friend WHERE ( friend.id1, friend.id2 ) NOT IN (SELECT id1, id2 FROM likes)
但是不能在多列上实现。 我如何编写这个查询
我不确定你是否想过:
select * from friend f where not exists ( select 1 from likes l where f.id1 = l.id and f.id2 = l.id2 )
它只适用于id1与id1和id2与id2不相关的情况。
另一个神秘的RDBMS。 你的语法在PostgreSQL中是完美的。 其他查询风格可能会执行得更快(尤其是NOT EXISTS
变体或LEFT JOIN
),但是您的查询是完全合法的。
不过,在涉及任何NULL
值时,要注意NOT IN
的缺陷:
- 查找连接不存在的logging
与左连接的变体:
SELECT * FROM friend f LEFT JOIN likes l USING (id1, id2) WHERE l.id1 IS NULL;
请参阅@Michał对NOT EXISTS
变体的回答。
四个基本变体的更详细的评估:
- select其他表中不存在的行
您可能应该使用NOT EXISTS
作为多列。