【发布时间】:2014-05-31 12:34:38
【问题描述】:
sql 1st 的结果:
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 2nd 的结果:
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,结果就像预期的一样。
【问题讨论】:
-
这是非常奇怪的行为,至少在 SQL Fiddle 上得到了证实,sqlfiddle.com/#!4/d41d8/27926。
-
我认为没有理由发生这种情况。它适用于我的 dbms (Ora 10g)。你用的是什么版本?
-
我在 Oracle 11g 版本 11.2.0.3.0 中得到了正确的结果
-
我在公司的oracle上测试过这个sql,执行后没有结果。我没有关注版本。我明天看看版本。
-
如果您使用的是 11.2.0.2(就像 SQL Fiddle 一样),可能是错误 12336962?