我想知道是否有人可以帮我链接连接 - 我不理解思考过程。
An example with three tables:
ArticleCategories
-----------------
CategoryID
CategoryName
Articles
---------
ArticleID
ArticleText
CategoryID (FK)
ArticleComments
-----------------
CommentID
ArticleID (FK)
CommentText
我有一个sp来获取特定类别的所有文章的文章信息,包括文章评论的数量,但我认为它需要改进。 我的斗争导致了这个:
With resultSet AS
(
select
a.ArticleID
, a.ArticleText
, a.CategoryID
, c.CommentCount
from Articles a
Left Outer Join
(Select count(c.CommentID) as CommentCount, c.ArticleID
from Comments c
Group BY c.ArticleID
) c
on a.ArticleID = c.ArticleID
)
select * from resultSet
where resultSet.CategoryID = 2
我该怎么写这个?我正在寻找一种方法来消除resultSet和resultSet上的select。
非常感谢您的帮助 比尔
答案 0 :(得分:2)
删除了WITH
子句的查询:
SELECT a.articleid,
a.articletext,
a.categoryid,
COALESCE(c.commentcount, 0) AS commentcount,
FROM ARTICLES a
LEFT JOIN (SELECT c.articleid,
COUNT(c.commentid) AS commentcount
FROM COMMENTS c
GROUP BY c.articleid) c ON c.articleid = a.articleid
WHERE a.categoryid = 2
我添加了COALESCE来处理文章没有评论的时候 - 虽然你没有提到你正在使用的文章,但它在Oracle和SQL Server中都是安全的。据我所知,由于WITH子句,它只能是SQL Server,Oracle或DB2。
答案 1 :(得分:1)
关闭....
你可以选择内部选择:
select a.ArticleID , a.ArticleText , a.CategoryID , count(c.CommentCount)
from Articles a
left join Comments c on a.articleid=c.articleid
where articleid=2
group by a.ArticleID , a.ArticleText , a.CategoryID
答案 2 :(得分:1)
select a.articleid, count(c.*) as commentcount
from articles a
left join articlecomments c on a.articleid = c.articleid
where a.categoryid = @categoryid
group by a.articleid
答案 3 :(得分:1)
如果我理解你的话,你就是这样:
SELECT
a.ArticleID,
a.ArticleText,
a.CategoryID,
(select count(*) from comments c where c.articleid=a.articleid)
FROM
article a
WHERE
a.categoryid=2
OR
SELECT
a.ArticleID,
a.ArticleText,
a.CategoryID,
count(c.commentid)
FROM
article a
left outer join comment c on c.articleid=a.articleid
WHERE
a.categoryid=2
GROUP BY
a.ArticleID,
a.ArticleText,
a.CategoryID
答案 4 :(得分:1)
他是我在构建查询时经历的过程:
首先,主要的驾驶表是什么?对于您,您获得了有关articles
的信息,因此建议使用articles
表:
select * from articles
接下来,我需要提供哪些其他表格,以及这些必需的表格,以获取我需要的其他信息?您需要ArticleComments
,这是可选的:
select
*
from
Articles a
left join ArticleComments acomm on acomm.ArticleID = a.ArticleID
现在,我确实需要哪些数据才能返回此查询? (并且还混入,只是为了节省一步,我需要什么选择标准?)
select
a.ArticleID,
a.ArticleText,
a.CategoryID,
count(c.*) CommentCount
from
Articles a
left join ArticleComments acomm on acomm.ArticleID = a.ArticleID
where
a.CategoryID = @CatID
group by
a.ArticleID
只需将其分解,一步一步,完成从中获取数据的位置,以及所需的数据。