sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgresql IN-uttalande

Detta beteende är korrekt enligt ANSI-standarder.

Om det okvalificerade kolumnnamnet inte löser sig i det inre omfånget kommer det yttre omfattningen att beaktas. Så effektivt gör du en oavsiktlig korrelerad underfråga.

Så länge tabellen profile innehåller minst en rad då

 FROM users
 WHERE user_id IN (
        SELECT user_id FROM profile
        )

kommer att matcha alla rader i users (förutom alla där users.user_id IS NULL som WHERE NULL IN (NULL) bedöms inte vara sant). För att undvika detta möjliga problem kan du använda två delnamn.

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

Skulle ge felet




  1. Hur DAYNAME() fungerar i MariaDB

  2. ORACLE TRIGGER INSERT INTO ... (VÄLJ * ...)

  3. Python MySQL Connector:Kan inte ansluta till servern med SSL

  4. Använder NOT IN med NOT EQUAL när du frågar