Mysql
 sql >> Base de données >  >> RDS >> Mysql

requête mysql pour tout sélectionner sauf

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

Utiliser NON EXISTE :

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)

JOINTURE GAUCHE/EST 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

Performances :

Si le les colonnes comparées (widget_id dans l'une ou l'autre table) ne sont pas nullables, LEFT JOIN/IS NULL fonctionne le mieux sur MySQL . Si le les colonnes sont nullables (la valeur peut être NULL), NOT IN ou NOT EXISTS fonctionnent mieux .