我有一个电子商务店面数据库。 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的标记数。
答案 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 - 它看到了值爆炸!