Como ejemplo, quiero obtener la lista de todos los elementos con ciertas etiquetas aplicadas. Que podía hacer cualquiera de los siguientes:SQL Efficiency: WHERE IN Subconsulta vs. JOIN luego 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 algo completamente diferente.
En general (suponiendo que exista una regla general), ¿cuál es un enfoque más eficiente?
@Larsenal: puede reemplazar un 'LEFT JOIN' con un' INNER JOIN' en su segunda consulta, los resultados serán los mismos. Un 'LEFT JOIN' devolverá' NULL's para las filas en 'ItemTag' que no tienen un' Item.ID' correspondiente, y su condición 'WHERE' las filtrará. – Quassnoi