Pomocí 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)
Pomocí 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
Vysvětlení
Nejoptimálnější dotaz lze určit podle toho, zda porovnávané sloupce mezi těmito dvěma tabulkami mají hodnotu NULL (např. pokud hodnoty specific_product_id
v kterékoli tabulce může být NULL
).
- Pokud možnost null,
NOT IN
neboNOT EXISTS
je nejlepší volbou v MySQL - Pokud NELZE NULL, `LEFT JOIN/IS NULL je nejlepší volbou v MySQL
Dodatek
Po určení optimálního dotazu se podívejte na vytváření indexy (případně pokrývající indexy) alespoň:
specific_product_id
TABLE_PRODUCT.astatus