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 .