Używanie 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)
Korzystanie NIE ISTNIEJE:
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)
LEWE JOIN/JEST 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
Wydajność:
Jeśli porównywane kolumny (widget_id w obu tabelach) nie mają wartości null, LEFT JOIN/IS NULL działa najlepiej na MySQL . Jeśli kolumny dopuszczają wartość NULL (wartość może być NULL), osiągają lepsze wyniki:NOT IN lub NOT EXISTS .