2008-12-23 76 views
1

我有一个电子商务店面的数据库。 MSSQL 2008.产品标签关系的SQL查询

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

产品:
ID,名称,价格

标签:
ID,名称,排序顺序,parentId的(允许空值)

ProductTags:
的productid,标签识别

我试图在SQL中创建一个视图,但我完全吮吸编写SQL。

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

ProductCount是关联到这个标签的产品数量。 ChildTagCount是具有此标签ID作为其标识的标签的数量。

回答

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 
+0

您为什么选择从连接表(producttags)中计算productid仅仅是因为从连接表中统计不同的值可能无法给出正确的结果,因为产品可能有多个标签,反之亦然。请帮忙。谢谢 – 2009-08-26 13:07:26

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 

会这样吗?

0

这两个建议的工作。他们中的任何一个都有任何表现有益/痛苦吗?

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