enter image description here

DB2第10和第11版 SQL为:

WITH T AS(
SELECT ID FROM
(SELECT ID FROM (VALUES(1),(2),(3)) T(ID)
GROUP BY ID) WHERE ID IN(1,2,3)
  )
SELECT ID FROM T WHERE ID IN(2,3)
UNION
SELECT ID FROM T WHERE 1 = 0 

预期结果为%2行%2和%3,但有%3条记录

原来的复杂查询已被简化

推荐答案

它"看起来"像是一个错误,changing from union to union all made no difference,但如果在最后的查询中颠倒SELECT的顺序,您将只返回2行.也许其他人可以解释这种差异.以下是一把DB2小提琴的曲子:

WITH T AS(
SELECT ID FROM
(SELECT ID FROM (VALUES(1),(2),(3)) T(ID)
GROUP BY ID) WHERE ID IN(1,2,3)
  )
SELECT ID FROM T WHERE ID IN(2,3)
--UNION
--SELECT ID FROM T WHERE 1 = 0
ID
2
3
WITH T AS(
SELECT ID FROM
(SELECT ID FROM (VALUES(1),(2),(3)) T(ID)
GROUP BY ID) WHERE ID IN(1,2,3)
  )
--SELECT ID FROM T WHERE ID IN(2,3)
--UNION
SELECT ID FROM T WHERE 1 = 0

未返回任何行

WITH T AS(
SELECT ID FROM
(SELECT ID FROM (VALUES(1),(2),(3)) T(ID)
GROUP BY ID) WHERE ID IN(1,2,3)
  )
SELECT ID FROM T WHERE ID IN(2,3)
UNION ALL
SELECT ID FROM T WHERE 1 = 0
ID
1
2
3
WITH T AS(
SELECT ID FROM
(SELECT ID FROM (VALUES(1),(2),(3)) T(ID)
GROUP BY ID) WHERE ID IN(1,2,3)
  )
SELECT ID FROM T WHERE 1 = 0
UNION ALL
SELECT ID FROM T WHERE ID IN(2,3)
ID
2
3

fiddle

Sql相关问答推荐

判断时间之间是否有时间

SQL计数所有值在联接范围内的行

在数据分区内执行确定

如何转换和汇总行数

在SQL中返回缺省值,即使查询不返回任何结果

如何使用SQL Server中的Nodes()方法执行与OPENXML相同的操作

ColdFusion+Docker:未安装SQLSERVER包

Postgres jsonpath运算符的变量替换,如_regex?

显示十进制列,但尽可能显示为整数

如何在MS Access中基于另外两个表自动填充一个表中的字段?

在 PostgreSQL 中生成时间序列查询

在 SQL Server 中合并两个 XML 列

使用临时表判断记录是否存在 - 如果存在则执行相同的操作

在 SQL Server 中查找重复项

一次 Select 语句中按组累计的SQL累计数

使用 GROUP BY 时如何创建其他组?

计算 SQL 中的总体成功率:递归 CTE 还是替代方法?

PlSql 陷入死循环

SQL 中的问题与包含最大日期的记录连接

聚合 Athena 中的列