IN 有多列是可能的吗?

IN with more than one column is possible?

我有这个SQL

Select A, B, D from T
Where not exists (select F, S from Z)

我可以对多列使用 NOT IN 做同样的事情吗?

一些数据库(例如 postgresql)支持行值,您可以在其中执行类似 ROW(x, y) NOT IN (select f, s from z) 的操作,不幸的是,Firebird 没有行值,因此您不能在一个 [=12] 中有超过一列=](或NOT IN)。

但是你通常可以用存在的相关子查询来模拟它,例如:

SELECT A, B, D
FROM T
WHERE NOT EXISTS (
    SELECT 1 
    FROM Z 
    WHERE Z.F = T.X AND Z.S = T.Y
)

请注意,EXISTS 不关心 selected 值,只关心生成的一行或多行,因此您在 select 中使用的两列EXISTS 不相关(它也可以像我上面使用的那样 1)。