IN可以使用多列吗?

时间:2015-02-25 20:41:47

标签: firebird

我有这个SQL

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

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

1 个答案:

答案 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一样。)