PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Oświadczenie Postgresql IN

To zachowanie jest poprawne zgodnie ze standardami ANSI.

Jeśli niekwalifikowana nazwa kolumny nie zostanie rozwiązana w zakresie wewnętrznym, zostanie uwzględniony zakres zewnętrzny. Tak więc skutecznie wykonujesz niezamierzone skorelowane podzapytanie.

Dopóki tabela profile zawiera co najmniej jeden wiersz, to

 FROM users
 WHERE user_id IN (
        SELECT user_id FROM profile
        )

zakończy się dopasowaniem wszystkich wierszy w users (z wyjątkiem tych, w których users.user_id IS NULL jako WHERE NULL IN (NULL) nie ocenia się jako prawda). Aby uniknąć tego możliwego problemu, możesz użyć dwóch nazw części.

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

Dałoby błąd




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:Jak ustawić search_path na poziomie użytkownika?

  2. Sprawdzenie minimalnej zmienności w R lub PostgreSQL

  3. Brak wyników zwróconych przez błąd zapytania w PostgreSQL

  4. Narzędzie do tłumaczenia Oracle PL/SQL na Postgresql PL/pgSQL

  5. PostgreSQL - kolumna Aliasy i HAVING