sql >> Databáze >  >> RDS >> Mysql

SQL dotaz alespoň na jednu věc

Chcete-li najít všechny uživatele s alespoň jedním příspěvkem s hodnocením vyšším než 10, použijte:

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

EXISTS se nestará o příkaz SELECT v něm - můžete nahradit NULL za 1/0, což by mělo mít za následek matematickou chybu při dělení nulou... Ale nebude, protože EXISTS se zabývá pouze filtrací v klauzule WHERE.

Korelace (WHERE p.user_id =u.id) je důvod, proč se tomu říká korelovaný dílčí dotaz a kromě srovnání hodnocení vrátí pouze řádky z tabulky USERS, kde se hodnoty id shodují.

EXISTS je také rychlejší v závislosti na situaci, protože vrací true, jakmile jsou splněna kritéria – duplikáty nehrají roli.



  1. Jak nahrát více obrázků v laravel

  2. Tabulka Laravel Migration již existuje, ale chci přidat novou, ne starší

  3. Správa uživatelů databáze:Správa rolí pro MariaDB

  4. Video:Oracle 12c IDENTITY Column Performance na RAC