我想对我自己的不在表中的值列表中的所有值列表中的所有值兼容查询。此查询在Microsoft SQL Server
中运行良好SELECT * FROM
(values (1),(2),(3),(4),(7), (7000000)) as T(ID)
EXCEPT
SELECT ID
FROM ACCOUNT;
我知道这个答案SQL-如何从表中不在的子句列表中返回ID?他们建议使用值子句。也许它可以与其他版本的db2一起使用,但是在我的我会得到错误"非法符号("所以我不确定它是否喜欢我版本的db2中的值。
另外您可以尝试使用CTA:
WITH
T(ID) AS (VALUES 1,2,3,4,7,7000000)
SELECT ID FROM T
EXCEPT
SELECT ID FROM ACCOUNT;
db2 v11 for z/os不支持此上下文中的值子句,尽管Linux/unix/windows上的DB2 V11确实支持它。
尽管这很丑陋,并且可能有更好的方法,但您可能会尝试:
SELECT * FROM
(select 1 from sysibm.sysdummy1 union
select 2 from sysibm.sysdummy1 union
select 3 from sysibm.sysdummy1 union
select 4 from sysibm.sysdummy1 union
select 7 from sysibm.sysdummy1 union
select 7000000 from sysibm.sysdummy1 )
EXCEPT
SELECT ID
FROM ACCOUNT;
使用可以使用 sysibm.sysdummy1
:
SELECT t.id
FROM (SELECT 1 as ID FROM sysibm.sysdummy1 UNION ALL
SELECT 2 FROM sysibm.sysdummy1 UNION ALL
SELECT 3 FROM sysibm.sysdummy1 UNION ALL
SELECT 4 FROM sysibm.sysdummy1 UNION ALL
SELECT 7 FROM sysibm.sysdummy1
) as t
EXCEPT
SELECT ID
FROM ACCOUNT;