作爲示例,我想要獲取應用了特定標籤的所有項目的列表。我可以做以下之一:SQL效率:在子查詢與加入的位置然後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)
或者
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
或者完全不同的東西。
一般來說(假設有一條通用規則),什麼是更高效的方法?
@Larsenal:您可以在第二個查詢中用`INNER JOIN`替換`LEFT JOIN`,結果將是相同的。一個`LEFT JOIN`將返回`ItemTag`中沒有相應的`Item.ID`的行的`NULL`,並且`WHERE`條件會將它們過濾掉。 – Quassnoi 2009-07-24 19:45:20