Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapytanie SQL o co najmniej jedno z czegoś

Aby znaleźć wszystkich użytkowników z co najmniej jednym postem z oceną powyżej 10, użyj:

SELECT u.*
  FROM USERS u
 WHERE EXISTS(SELECT NULL
                FROM POSTS p
               WHERE p.user_id = u.id
                 AND p.rating > 10)

EXISTS nie dba o zawarte w nim polecenie SELECT - możesz zastąpić NULL 1/0, co powinno skutkować błędem matematycznym przy dzieleniu przez zero... Ale tak się nie stanie, ponieważ EXISTS dotyczy tylko filtrowania w klauzula WHERE.

Korelacja (WHERE p.user_id =u.id) jest powodem, dla którego nazywa się to skorelowanym podzapytaniem i zwróci tylko wiersze z tabeli USERS, w których wartości identyfikatora są zgodne, oprócz porównania ocen.

EXISTS jest również szybsze, w zależności od sytuacji, ponieważ zwraca prawdę, gdy tylko kryteria zostaną spełnione - duplikaty nie mają znaczenia.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wygenerować dynamiczną tabelę sekwencji w MySQL?

  2. Jak zmienić nazwę przesłanego pliku przed zapisaniem go w katalogu?

  3. jak wyczyścić / opróżnić pulę buforów mysql innodb?

  4. dziwne - mysql sql::SQLException nie jest przechwycony przez jego typ, ale przechwycony jako std::exception i pomyślnie odtworzony

  5. Jak naprawić wyjątek java.sql.SQLException:Nie znaleziono kolumny „id”. błąd w Spring Boot