Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL заявка поне едно от нещо

За да намерите всички потребители с поне една публикация с рейтинг над 10, използвайте:

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

EXISTS не се интересува от израза SELECT в него - можете да замените NULL с 1/0, което би трябвало да доведе до математическа грешка при деление на нула... Но няма да го направи, защото EXISTS се занимава само с филтрирането в клаузата WHERE.

Корелацията (WHERE p.user_id =u.id) е причината това да се нарича корелирана подзаявка и ще върне само редове от таблицата USERS, където стойностите на идентификатора съвпадат, в допълнение към сравнението на рейтинга.

EXISTS също е по-бърз в зависимост от ситуацията, защото връща true веднага щом критериите бъдат изпълнени – дубликатите нямат значение.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изберете топ 10 записа за всяка категория в MySQL

  2. Експортирайте MySQL данни в Excel в PHP

  3. Как мога да внедря commit/rollback за MySQL в PHP?

  4. Създайте MySQL база данни от Java

  5. Изявление на MySQL Select и IF().