DB2 SQL查询结果多余数据

pkbketx9  于 12个月前  发布在  DB2
关注(0)|答案(1)|浏览(173)

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条记录
原来复杂的查询已经简化

x4shl7ld

x4shl7ld1#

它“看起来像”一个bug,从一个联合体到另一个联合体的改变都没有什么区别,但是如果你在最后的查询中颠倒选择的顺序,你将只返回2行。也许其他人可以解释这种差异。下面是一个DB2 fiddle:

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

相关问题