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

Verhalten des inneren Joins innerhalb existiert sql

Der Unterschied besteht darin, dass bei Verwendung von exists - Die darin enthaltene Abfrage hängt normalerweise von der Hauptabfrage ab (Mittelwert verwendet Spalten davon und kann daher nicht separat ausgeführt werden) und überprüft daher für jede Zeile der Hauptabfrage, ob einige Daten, die von der Unterabfrage abgerufen wurden, vorhanden sind oder nicht.

Das Problem Ihrer ersten Abfrage besteht darin, dass die Unterabfrage innerhalb des Existiert-Blocks sowieso nicht von den Hauptabfragespalten abhängt, sondern eine separate Abfrage ist, die immer eine Zeile mit 1 zurückgibt , also für jede Zeile der Hauptabfrage das Ergebnis von exists wird immer true sein . Ihre erste Abfrage entspricht also nur

SELECT distinct(company_id)
FROM user
WHERE user.user_id = 123 
AND user.company_id IS NOT NULL

Siehe auch Geige