Wie verwenden von oracle-outer-join mit einem filter where-Klausel
Wenn ich Schreibe einen sql -:
select *
from a,b
where a.id=b.id(+)
and b.val="test"
und ich möchte alle Datensätze aus einer, in dem ein entsprechender Datensatz in b nicht vorhanden oder es existiert mit val="test", ist dies der richtige Abfrage?
- Wie viele Tabelle haben Sie und was ist ein.b und c ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bist du viel besser dran, unter Verwendung der ANSI-syntax
Können Sie tun die gleiche Sache mit der Oracle-syntax auch, aber es wird ein bisschen hinkey
Beachten Sie, dass in beiden Fällen, ich Ignoriere die
c
Tabelle, da Sie nicht angeben, eine join-Bedingung. Und ich gehe davon aus, dass Sie nicht wirklich wollen zu join A nach B und dann erzeugen ein Kartesisches Produkt mit C.Verschieben Sie die Bedingung in das
JOIN
- Klausel und Verwendung der ANSI-standard-join-Muster.Einen LEFT OUTER JOIN ist ein JOIN-Operationen, die es Ihnen erlauben zu spezifizieren eine join-Klausel. Es bewahrt das unübertroffene Zeilen aus der ersten (linken) Tabelle ein, verbinden Sie Sie mit einer NULL-Zeile in der Form der zweiten (rechten) Tabelle ein.
So können Sie das wie folgt tun :
WÄHLEN
AUS einem LEFT OUTER JOIN b
AUF einem.id = b.id
--Beachten Sie, dass Sie haben verwendet doppelte Anführungszeichen "test" verwendet wird und nicht für varchar in SQL sollten Sie die Verwendung von single quote 'test'
B.val = 'test';