Oracle propriétaire rejoint en les rejoignant sur plusieurs conditions
J'ai le follwing 2 versions de conforme à la norme ANSI SQL(colonne/table les noms ont été changés pour protéger les données confidentielles), dont l'un d'eux répond à ma demande par la suite le droit de la logique, tandis que l'autre ne l'est pas.
1)ANSI Joindre 1-Travaux
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) donne de sortie comme ceci:
COLUMN_A COUNT(COLUMN_A)
--------------------------
A 0
B 0
C 1
D 1
E 0
2)ANSI 2-Ne fonctionne pas
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 propriétaire rejoignez-Ne fonctionne pas
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) donne de sortie comme ceci:
COLUMN_A COUNT(COLUMN_A)
--------------------------
C 1
D 1
Je comprends (2,ANSI) & (3 PROPRIÉTAIRES) sont équivalentes. Mais Est-il équivalent de propriété SQL pour (1,ANSI)?.
Toute aide serait la bienvenue.
Merci.
Edit: j'ai mis à jour la question avec l'exemple de sortie.
Vous pouvez ajouter de l'information pour la rendre claire, ce que la sortie désirée ressemble, et ce que vous obtenez dans les mauvaises situations.
OriginalL'auteur komedit1 | 2011-04-29
Vous devez vous connecter pour publier un commentaire.
Vous voudrez probablement changer cette condition:
soit sur ce:
ou ceci:
Mais en général, je dirais que faire des jointures avec la syntaxe ANSI. Même comme quelqu'un qui a appris Oracle syntaxe de la première et est très à l'aise avec elle, l'ANSI est beaucoup plus clair pour les jointures externes.
ORA-01417
, ce qui nécessite de nidification (externe se joindre à une sous-requête) ou ANSI rejoint.Merci. Cela fonctionne!. Je suis d'accord que le propriétaire de la syntaxe n'est pas très soignée. Je voulais juste savoir en quoi il est capable de faire ce que ANSI rejoindre.
OriginalL'auteur Dave Costa