PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Dichiarazione IN Postgresql

Questo comportamento è corretto per gli standard ANSI.

Se il nome della colonna non qualificato non viene risolto nell'ambito interno, verrà preso in considerazione l'ambito esterno. In modo così efficace stai facendo una query secondaria correlata non intenzionale.

Finché la tabella profile contiene almeno una riga quindi

 FROM users
 WHERE user_id IN (
        SELECT user_id FROM profile
        )

finirà per corrispondere a tutte le righe in users (tranne dove users.user_id IS NULL come WHERE NULL IN (NULL) non restituisce true). Per evitare questo possibile problema puoi utilizzare due nomi di parti.

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

Darebbe l'errore