PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgresql IN-Anweisung

Dieses Verhalten ist gemäß ANSI-Standards korrekt.

Wenn der nicht qualifizierte Spaltenname im inneren Bereich nicht aufgelöst wird, wird der äußere Bereich berücksichtigt. Sie führen also effektiv eine unbeabsichtigte korrelierte Unterabfrage durch.

Solange die Tabelle profile enthält dann mindestens eine Zeile

 FROM users
 WHERE user_id IN (
        SELECT user_id FROM profile
        )

wird am Ende alle Zeilen in users abgleichen (außer wo users.user_id IS NULL als WHERE NULL IN (NULL) wird nicht als wahr ausgewertet). Um dieses mögliche Problem zu vermeiden, können Sie zweiteilige Namen verwenden.

DELETE FROM users
WHERE  user_id IN (SELECT p.user_id
                   FROM   profile p) 

Würde den Fehler geben