使用匿名表或硬值列表的DB2 11查询

shstlldc  于 2022-11-07  发布在  DB2
关注(0)|答案(3)|浏览(165)

我希望对我自己的硬编码值列表中所有不在表中的值执行DB2兼容查询。此查询在Microsoft SQL Server中运行良好

SELECT * FROM
  (values (1),(2),(3),(4),(7), (7000000)) as T(ID)
EXCEPT
  SELECT ID
  FROM ACCOUNT;

我知道这个答案SQL - How can I return the IDs from a where clause list that are not in the table?,他们建议使用VALUES子句。也许它可以在其他版本的DB2中使用,但是在我的版本中,我得到了错误“非法符号(“,所以我不确定它是否喜欢我的DB2版本中的VALUES函数。

fcy6dtqo

fcy6dtqo1#

Db2 v11 for Z/OS不支持此上下文中的values子句,尽管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;

hwamh0ep

hwamh0ep2#

使用可以使用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;
fdbelqdn

fdbelqdn3#

或者,您可以尝试使用CTA:

WITH
T(ID) AS (VALUES 1,2,3,4,7,7000000)
SELECT ID FROM T
EXCEPT
SELECT ID FROM ACCOUNT;

相关问题