Med 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)
Med 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
Förklaring
Den mest optimala frågan kan bestämmas av om kolumnerna som jämförs mellan de två tabellerna är NULL-bara (IE:om värdena för specific_product_id
i båda tabellen kan vara NULL
).
- Om nullbar,
NOT IN
ellerNOT EXISTS
är det bästa valet i MySQL - Om INTE nullbar, `LEFT JOIN/IS NULL är det bästa valet i MySQL
Tillägg
När den optimala frågan har fastställts, ta en titt på skapa index (möjligen täcker index) för åtminstone:
specific_product_id
TABLE_PRODUCT.astatus