Korzystanie z NOT EXISTS
SELECT p.*
FROM TABLE_PRODUCT p
WHERE p.astatus = 'APAST'
AND NOT EXISTS (SELECT NULL
FROM TABLE_USER_OWNED_AUCTION uoa
WHERE uoa.specific_product_id = p.specific_product_id)
Używanie LEFT JOIN/IS NULL
SELECT p.*
FROM TABLE_PRODUCT p
LEFT JOIN TABLE_USER_OWNED_AUCTION uoa ON uoa.specific_product_id = p.specific_product_id
WHERE p.astatus = 'APAST'
AND uoa.own_id IS NULL
Wyjaśnienie
Najbardziej optymalne zapytanie można określić na podstawie tego, czy kolumny porównywane między dwiema tabelami są NULLable (tzn. jeśli wartości specific_product_id
w każdej tabeli może być NULL
).
- Jeśli nullable,
NOT IN
lubNOT EXISTS
to najlepszy wybór w MySQL - Jeśli NIE nullable, `LEFT JOIN/IS NULL to najlepszy wybór w MySQL
Uzupełnienie
Po ustaleniu optymalnego zapytania spójrz na tworzenie indeksy (ewentualnie obejmujące indeksy) co najmniej:
specific_product_id
TABLE_PRODUCT.astatus