我有这个SQL
Select A, B, D from T
Where not exists (select F, S from Z)
我可以使用NOT IN
为多个列做同样的事情吗?
答案 0 :(得分:0)
某些数据库(例如postgresql)支持行值,您可以执行类似ROW(x, y) NOT IN (select f, s from z)
的操作,但Firebird没有行值,因此IN
中不能有多个列(或NOT IN
)。
但是,您通常可以使用exists中的相关子查询来模拟它,例如:
SELECT A, B, D
FROM T
WHERE NOT EXISTS (
SELECT 1
FROM Z
WHERE Z.F = T.X AND Z.S = T.Y
)
请注意,EXISTS
并不关心所选的值,只是生成了一行或多行,因此您在EXISTS
中的选择中使用的两列不相关(它可能与我上面使用的1
一样。)