Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Sind verschachtelte Klammern in der FROM-Klausel gültige Oracle SQL-Syntax?

Es ist eine legale Syntax, Klammern in einer Join-Klausel zu verwenden in einem FROM , und die Klammern do wirken.

Betrachten Sie diese Abfrage:

WITH table_a AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 30),
     table_b as ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 20),
     table_c AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 10)
SELECT a.id, b.id, c.id
FROM   table_a a left join ( table_b b inner join table_c c ON c.id = b.id ) ON b.id = a.id 
ORDER BY 1,2,3;

Die Klammern ermöglichen es Ihnen, eine innere Verknüpfung der Tabellen b durchzuführen und c und verbinden Sie das dann mit a .

Ohne die Klammer wäre der Versuch, dies als Linksverknüpfung auszudrücken, unmöglich. Sie würden entweder die Zeilen 11-30 aus Tabelle a nicht erhalten oder sonst Zeilen 11-20 der Tabelle c wäre null s (je nachdem, wie Sie es versucht haben).

Beachten Sie, dass die obige Abfrage äquivalent ist zu:

WITH table_a AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 30),
     table_b as ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 20),
     table_c AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 10)
SELECT a.id, b.id, c.id
FROM   table_b b inner join table_c c on c.id = b.id right join table_a a on a.id = b.id 
ORDER BY 1,2,3;

, für die keine Klammern erforderlich sind. Wenn Sie also wirklich keine Klammern im FROM verwenden möchten Klausel, können Sie dies normalerweise tun. Ich persönlich bevorzuge den LEFT JOIN Methode mit Klammern anstelle eines RIGHT JOIN .