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

Postgresql IN-erklæring

Denne adfærd er korrekt i henhold til ANSI-standarder.

Hvis det ukvalificerede kolonnenavn ikke løses i det indre omfang, vil det ydre omfang blive taget i betragtning. Så effektivt laver du en utilsigtet korreleret underforespørgsel.

Så længe tabellen profile indeholder mindst én række derefter

 FROM users
 WHERE user_id IN (
        SELECT user_id FROM profile
        )

vil ende med at matche alle rækker i users (undtagen hvor users.user_id IS NULL som WHERE NULL IN (NULL) ikke vurderes til sandt). For at undgå dette mulige problem kan du bruge to delnavne.

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

Ville give fejlen




  1. Tilfældig værdi for kolonnen DATETIME

  2. Sådan afrundes en tid til nærmeste 15-minutters segment

  3. LIKE med % på kolonnenavne

  4. mySQL drop-tabeller med jokertegn, der kun bruger SQL-sætning?