Brug af 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)
Brug af 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
Forklaring
Den mest optimale forespørgsel kan bestemmes ved, om kolonnerne sammenlignet mellem de to tabeller er NULLable (IE:hvis værdierne for specific_product_id
i begge tabeller kan være NULL
).
- Hvis nullable,
NOT IN
ellerNOT EXISTS
er det bedste valg i MySQL - Hvis IKKE nullbar, `LEFT JOIN/IS NULL er det bedste valg i MySQL
Tillæg
Når den optimale forespørgsel er blevet bestemt, kan du tage et kig på oprettelse indekser (dækker muligvis indekser) for mindst:
specific_product_id
TABLE_PRODUCT.astatus