gpt4 book ai didi

sql - 为什么这个 sql 使用 union all 没有返回任何数据

转载 作者:行者123 更新时间:2023-12-04 12:47:43 24 4
gpt4 key购买 nike

sql 1 的结果:

select p1.t1, p2.t2, p2.t3 from 
(select 'A' as t1,'' as t2,'' as t3 from dual ) p1 left join
(select '' as t1, '' as t2, '' as t3 from dual where 1=2) p2 on p1.t1 = p2.t1


A   NULL    NULL

sql 2 的结果:
select p1.t1, p2.t2, p2.t3 from 
(select 'B' as t1,'' as t2,'' as t3 from dual ) p1 left join
(select '' as t1, '' as t2, '' as t3 from dual where 1=2) p2 on p1.t1 = p2.t1


B   NULL    NULL

如果我将 sql 的所有这两个部分结合起来,我预期的 sql 是:
A    NULL    NULL
B NULL NULL

但我没有结果。

sql如下所示:
select p1.t1, p2.t2, p2.t3 from 
(select 'A' as t1,'' as t2,'' as t3 from dual ) p1 left join
(select '' as t1, '' as t2, '' as t3 from dual where 1=2) p2 on p1.t1 = p2.t1
union all
select p1.t1, p2.t2, p2.t3 from
(select 'B' as t1,'' as t2,'' as t3 from dual ) p1 left join
(select '' as t1, '' as t2, '' as t3 from dual where 1=2) p2 on p1.t1 = p2.t1

我在 oracle 上测试了这个 sql。
我想知道为什么结果不像我的预期。
顺便说一句,如果使用 union 而不是 union all,结果就像预期的那样。

最佳答案

你还没有说你在哪个版本上遇到这个问题,但 Gordon Linoff 在运行 11.2.0.2 的 SQL Fiddle 上进行了复制,正如其他人所说,它在 10g 和 11.2.0.3 中没有出现,所以认为你似乎是合理的也可能在 11.2.0.2 上。

在这种情况下,这看起来与错误 12336962 相同。如果您可以访问 Oracle Support,您(或您的 DBA)可以查看它,但我无法重现它在这里所说的内容,即使它是一个已发布的错误。运行您的查询和错误报告中的示例会产生相同的结果,并且在这两种情况下都从 union all 更改。至 union产生正确的结果。不过,您可能想要提出服务请求以得到确认。

该错误已在 11.2.0.3 补丁集中修复 - 我不确定我是否真的应该分享它,but it's already published here - 所以修补可能是你最好的选择,如果你提出 SR,Oracle 可能会建议你这样做。如有疑问,请直接询问 Oracle。

关于sql - 为什么这个 sql 使用 union all 没有返回任何数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23112798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com