Come esempio, voglio ottenere l'elenco di tutti gli elementi con determinati tag applicati a loro. Ho potuto fare una delle seguenti operazioni:SQL Efficiency: WHERE IN subquery vs. JOIN quindi GROUP
SELECT Item.ID, Item.Name
FROM Item
WHERE Item.ID IN (
SELECT ItemTag.ItemID
FROM ItemTag
WHERE ItemTag.TagID = 57 OR ItemTag.TagID = 55)
O
SELECT Item.ID, Item.Name
FROM Item
LEFT JOIN ItemTag ON ItemTag.ItemID = Item.ID
WHERE ItemTag.TagID = 57 OR ItemTag.TagID = 55
GROUP BY Item.ID, Item.Name
O qualcosa di completamente diverso.
In generale (supponendo che ci sia una regola generale), qual è un approccio più efficiente?
@Larsenal: è possibile sostituire un 'SINISTRA CONGIUNTO' con un' INNER JOIN' nella seconda query, i risultati saranno gli stessi. Un 'LEFT JOIN' restituirà' NULL's per le righe in 'ItemTag' che non hanno un corrispondente' Item.ID', e la condizione 'WHERE' le filtrerà. – Quassnoi