Sử dụng 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)
Sử dụng KHÔNG TỒN TẠI:
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)
THAM GIA TRÁI / LÀ KHÔNG ĐỦ:
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
Hiệu suất:
Nếu các cột được so sánh (widget_id trong một trong hai bảng) không thể nullable, LEFT JOIN / IS NULL hoạt động tốt nhất trên MySQL . Nếu cột không thể sử dụng được (giá trị có thể là NULL), KHÔNG CÓ hoặc KHÔNG TỒN TẠI hoạt động tốt hơn .