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条记录
原来复杂的查询得到了简化
它“看起来像”一个错误,从联合更改为联合没有任何区别,但是如果您颠倒最终查询中的选择顺序,您将只返回 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 |