Oracle proprietäre tritt - Beitritt auf mehrere Bedingungen
Habe ich in den folgenden 2 Versionen von ANSI-konforme SQL(Spalte/Tabelle Namen geändert zum Schutz von vertraulichen Daten), von denen einer von Ihnen erfüllt meine Anforderung nach der richtigen Logik, während der andere nicht.
1)ANSI-Join 1-Funktioniert
SELECT b.COLUMN_A,
COUNT(a.COLUMN_A)
FROM TABLE1 a
RIGHT OUTER JOIN
(SELECT COLUMN_A FROM TABLE2 WHERE COLUMN_X='TEST') b
ON a.COLUMN_A = b.COLUMN_A
AND a.COLUMN_B in (SELECT FROM TABLE3 WHERE COLUMN_Y=5) --WORKS
GROUP BY b.COLUMN_A
1) gibt eine Ausgabe wie diese:
COLUMN_A COUNT(COLUMN_A)
--------------------------
A 0
B 0
C 1
D 1
E 0
2)ANSI-Join 2-funktioniert nicht
SELECT b.COLUMN_A,
COUNT(a.COLUMN_A)
FROM TABLE1 a
RIGHT OUTER JOIN
(SELECT COLUMN_A FROM TABLE2 WHERE COLUMN_X='TEST') b
ON a.COLUMN_A = b.COLUMN_A
WHERE
a.COLUMN_B in (SELECT FROM TABLE3 WHERE COLUMN_Y=5) --DOESN'T WORK
GROUP BY b.COLUMN_A
3)Oracle, proprietäre anzuschließen-funktioniert nicht
SELECT b.COLUMN_A,
COUNT(a.COLUMN_A)
FROM TABLE1 a,(SELECT COLUMN_A FROM TABLE2 WHERE COLUMN_X='TEST') b
WHERE
a.COLUMN_A(+) = b.COLUMN_A
AND a.COLUMN_B in (SELECT FROM TABLE3 WHERE COLUMN_Y=5) --DOESN'T WORK
GROUP BY b.COLUMN_A
2) & 3) liefert eine Ausgabe wie diese:
COLUMN_A COUNT(COLUMN_A)
--------------------------
C 1
D 1
Ich verstehen, (2,ANSI) & (3,PROPRIETÄRE) sind äquivalent. Aber es Ist eine gleichwertige proprietäre SQL für (1,ANSI)?.
Jede Hilfe wäre sehr willkommen.
Danke.
Edit: ich habe aktualisiert die Frage mit den sample-Ausgang.
Sie sollten erwägen, hinzufügen von Informationen deutlich zu machen, was die gewünschte Ausgabe aussieht, und was Sie bekommen sind in der schlechten Situation.
InformationsquelleAutor komedit1 | 2011-04-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werden Sie wahrscheinlich wollen, um dies zu ändern Zustand:
entweder diese:
oder so:
Aber im Allgemeinen, ich würde sagen, Sie outer-joins mit ANSI-syntax. Auch als jemand, der gelernt Oracle-syntax ersten und ist sehr komfortabel mit es, ANSI ist viel klarer für outer-joins.
ORA-01417
, die erfordert, Verschachtelung (äußere Beitritt zu einer Unterabfrage) oder ANSI-joins.Danke. Dies funktioniert!. Ich bin damit einverstanden, dass proprietäre syntax ist nicht sehr ordentlich. Wollte nur wissen, in welcher Weise er in der Lage ist das zu tun, was ANSI-join funktioniert.
InformationsquelleAutor Dave Costa