Utiliser 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)
Utilisation de 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
Explication
La requête la plus optimale peut être déterminée si les colonnes comparées entre les deux tables sont NULLables (c'est-à-dire si les valeurs de specific_product_id
dans l'une ou l'autre table peut être NULL
).
- Si nullable,
NOT IN
ouNOT EXISTS
est le meilleur choix dans MySQL - Si NON nullable, `LEFT JOIN/IS NULL est le meilleur choix dans MySQL
Avenant
Une fois la requête optimale déterminée, regardez créer index (couvrant éventuellement des index) pendant au moins :
specific_product_id
TABLE_PRODUCT.astatus