2014-04-16 9 views
7

das Ergebnis der SQL-Platz 1:warum diese SQL verwendet Vereinigung zurück alle keine Daten

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 

ist

A NULL NULL 

das Ergebnis der 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 

ist

B NULL NULL 

wenn ich union all diese beiden Teil von SQL, meine erwartet SQL sind:

A NULL NULL 
B NULL NULL 

aber ich kein Ergebnis.

die SQL ist wie unten:

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 

ich diese SQL auf Oracle getestet. Ich möchte wissen, warum das Ergebnis nicht wie erwartet ist. übrigens, wenn Union statt Union alle verwenden, ist das Ergebnis wie erwartet.

+1

Dies ist sehr seltsames Verhalten und bestätigt auf SQL Fiddle, zumindest http://www.sqlfiddle.com/#!4/d41d8/27926. –

+0

Ich sehe keinen Grund dafür. Es funktioniert auf meinem dbms (Ora 10g). Welche Version verwendest du? –

+0

Ich bekomme das korrekte Ergebnis in Oracle 11g Release 11.2.0.3.0 – aglassman

Antwort

2

Sie haben nicht gesagt, auf welche Version Sie stoßen, aber Gordon Linoff reproduziert auf SQL Fiddle, das 11.2.0.2 ausführt, und wie andere gesagt haben, dass es in 10g und 11.2.0.3 nicht zu sehen ist, so scheint es vernünftig zu denken, Sie könnten auch auf 11.2.0.2 sein.

In diesem Fall sieht das mit Bug 12336962 identisch aus. Wenn Sie Zugriff auf Oracle Support haben, können Sie (oder Ihr DBA) nachsehen, aber ich kann nicht reproduzieren, was es hier sagt, obwohl es ein veröffentlichter Fehler ist . Das Ausführen der Abfrage und des Beispiels aus dem Fehlerbericht führt zu den gleichen Ergebnissen. In beiden Fällen führt die Änderung von union all zu union zu korrekten Ergebnissen. Vielleicht möchten Sie eine Serviceanfrage stellen, um das zu bestätigen.

Dieser Bug ist im 11.2.0.3 Patch-Set behoben - ich bin mir nicht sicher, ob ich das wirklich teilen soll, but it's already published here - also könnte das beste sein, und Oracle könnte das vorschlagen Raise eine SR. Wenn Sie Zweifel haben, fragen Sie Oracle direkt.

+0

die Version ist 11g (11.2.0.1.0), stimme ich Ihrer Meinung zu. – tankiller

Verwandte Themen