产品标签关系的SQL查询

时间:2008-12-23 11:44:20

标签: sql

我有一个电子商务店面数据库。 MSSQL 2008。

我有一个名为Products的表和一个名为Tags的表。这是一个多对多关系,由一个名为ProductTags的表绑定在一起。

产品:
id,名称,价格

标签:
id,name,sortorder,parentid(允许空值)

ProductTags:
productid,tagid

我正在尝试在SQL中创建一个View,但我完全厌倦了编写SQL。

视图应包括:
Tags.id,Tags.Name,Tags.sortorder,Tags.parentid,ProductCount,ChildTagCount

ProductCount是与此标记关联的产品数。 ChildTagCount是将此标记的id作为其parentid的标记数。

3 个答案:

答案 0 :(得分:2)

SELECT Tags.ID, Tags.Name, Tags.SortOrder, Tags.ParentID,
       COUNT(DISTINCT ProductTags.ProductID) AS ProductCount, 
       COUNT(DISTINCT ChildTags.ID) AS ChildTagCount
FROM Tags
LEFT OUTER JOIN ProductTags ON Tags.ID = ProductTags.TagID
LEFT OUTER JOIN Tags ChildTags ON Tags.ID = ChildTags.ParentID
GROUP BY Tags.ID, Tags.Name, Tags.SortOrder, Tags.ParentID

答案 1 :(得分:1)

Select T.id, T.Name, T.sortorder, T.parentid, 
(select count(*) from productstags where tagid=T.TagId) as ProductCount,
(select count(*) from Tags where parentid=T.TagId) as ChildTagCount
from Tags T
那会有用吗?

答案 2 :(得分:0)

这两项建议都有效。其中任何一个都有任何表现上的好处/痛苦吗?

说实话。我自己创建的视图与devio完全相同 - 只有我忘记了两个COUNT中的DISTINCT - 它看到了值爆炸!