带有匿名表或硬列表值的DB2 11查询

时间:2018-02-27 16:11:16

标签: sql db2 mainframe db2-zos

我想要一个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函数。

2 个答案:

答案 0 :(得分:1)

Z / OS的Db2 v11不支持此上下文中的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;

答案 1 :(得分:0)

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