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

mysql dotaz pro výběr všeho kromě

Pomocí NOT IN:

SELECT w.*
  FROM WIDGET w
 WHERE w.widget_id NOT IN (SELECT c.widget
                             FROM CHOSEN c
                            WHERE c.user_id = $user_id)

Pomocí NOT EXISTS:

SELECT w.*
  FROM WIDGET w
 WHERE NOT EXISTS (SELECT NULL
                     FROM CHOSEN c
                    WHERE c.widget_id = w.widget_id 
                      AND c.user_id = $user_id)

LEVÉ PŘIPOJENÍ / JE NULL:

   SELECT w.*
     FROM WIDGET w
LEFT JOIN CHOSEN c ON c.widget_id = w.widget
                  AND c.user_id = $user_id
    WHERE w.widget IS NULL

Výkon:

Pokud porovnávané sloupce (widget_id v žádné tabulce) nemají hodnotu null, LEFT JOIN/IS NULL funguje nejlépe na MySQL . Pokud sloupce mohou mít hodnotu Null (hodnota může být NULL), NOT IN nebo NOT EXISTS fungují lépe .



  1. ORA - 00933 záměna s vnitřním spojem a as

  2. Přetrvávající UUID v PostgreSQL pomocí JPA

  3. Jak mohu vyřešit Buď je parametr @objname nejednoznačný, nebo je nárokovaný @objtype (SLOUPEK) nesprávný.?

  4. MySQL IFNULL() Vysvětleno