Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysql-Abfrage, um alles außer auszuwählen

Verwendung von 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)

Verwendung von 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/IST 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

Leistung:

Wenn der Verglichene Spalten (widget_id in beiden Tabellen) sind nicht nullable, LEFT JOIN/IS NULL schneidet bei MySQL am besten ab . Wenn der Spalten sind nullable (der Wert könnte NULL sein), NOT IN oder NOT EXISTS performen besser .