DB2 SQL查询结果多余数据

问题描述 投票:0回答:1

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条记录

原来复杂的查询得到了简化

sql db2
1个回答
0
投票

它“看起来像”一个错误,从联合更改为联合没有任何区别,但是如果您颠倒最终查询中的选择顺序,您将只返回 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
身份证
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
身份证
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)
身份证
2
3

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.