【发布时间】:2010-11-13 20:01:26
【问题描述】:
例如,我想获取应用了特定标签的所有项目的列表。我可以执行以下任一操作:
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:您可以在第二个查询中将
LEFT JOIN替换为INNER JOIN,结果将是相同的。对于ItemTag中没有对应Item.ID的行,LEFT JOIN将返回NULLs,而您的WHERE条件会将它们过滤掉。
标签: sql-server performance tsql