sql >> Database >  >> RDS >> PostgreSQL

Postgresql IN-instructie

Dit gedrag is correct volgens ANSI-normen.

Als de niet-gekwalificeerde kolomnaam niet in het binnenste bereik wordt opgelost, wordt het buitenste bereik in overweging genomen. Je doet dus effectief een onbedoelde gecorreleerde subquery.

Zolang de tabel profile bevat dan ten minste één rij

 FROM users
 WHERE user_id IN (
        SELECT user_id FROM profile
        )

komt uiteindelijk overeen met alle rijen in users (behalve waar users.user_id IS NULL als WHERE NULL IN (NULL) evalueert niet naar waar). Om dit mogelijke probleem te voorkomen, kunt u twee namen van onderdelen gebruiken.

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

Zou de fout geven




  1. Basisprincipes van sys.dm_exec_requests

  2. Hoe gebruikers uit een bestaande database voor identityServer4 te halen?

  3. de vlag CLIENT_FOUND_ROWS in django wijzigen voor mysql-python (MySQLdb)?

  4. Spring-batch met kolomalias als sorteersleutel - onjuist waar-instructie