sql >> Base de Datos >  >> RDS >> Mysql

consulta mysql para seleccionar todo excepto

Usando NO EN:

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

Usando NO 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)

INCORPORACIÓN IZQUIERDA/ES NULO:

   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

Rendimiento:

Si las columnas comparadas (widget_id en cualquiera de las tablas) no admiten valores NULL, LEFT JOIN/IS NULL funciona mejor en MySQL . Si las columnas admiten valores NULL (el valor podría ser NULL), NOT IN o NOT EXISTS funcionan mejor .