sql >> Databasteknik >  >> RDS >> Mysql

mysql-fråga för att välja allt utom

Med 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)

Med 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)

LEFT JOIN/ÄR 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

Prestanda:

Om kolumner som jämförs (widget_id i någon av tabellen) är inte nullbara, LEFT JOIN/IS NULL presterar bäst på MySQL . Om kolumner är nullbara (värdet kan vara NULL), NOT IN eller NOT EXISTS presterar bättre .



  1. Foreach or For – Det är frågan

  2. Hur kan man multiplicera frågeresultat för att minska frågetalet?

  3. Hur man inaktiverar en främmande nyckelbegränsning i SQL Server (T-SQL-exempel)

  4. Hur LCASE()-funktionen fungerar i MySQL