来自特定帖子的前 5 条评论。如何编写我的 SQL
Posted
技术标签:
【中文标题】来自特定帖子的前 5 条评论。如何编写我的 SQL【英文标题】:Top 5 comments from a specific post. How to write my SQL 【发布时间】:2011-02-02 20:32:07 【问题描述】:我只想显示特定帖子的前 5 个 cmets(就像人们无法评论它们的 facebook 上的帖子)。
gbn 非常友好地通过执行以下操作来帮助解决该问题:
选择 * 从 tblPost P 外用 (SELECT TOP 5 * FROM tblComment C WHERE P.id = C.postid ORDER BY something) 内联但由于我不是 sql 大师,我需要您的帮助才能将其放入我真正的 sql 语句中。
选择 * 从 会员操作 INNER JOIN 在 memberactions.actionid = actions.id INNER JOIN 上的操作 成员 ON memberactions.memberid = members.id LEFT OUTER JOIN 成员 members_2 INNER JOIN actioncmets ON members_2.id = actioncmets.memberid INNER JOIN cmets ON actioncmets.commentid = cmets.id ON actions.id = actioncmets.actionid所以我的问题是你能否重新排列我的 sql 以将 OUTER APPLY 放在我真正的 sql 语句中。
假设我的表 cmets 代表 tblComment,而 actioncmets 代表表 tblPost
【问题讨论】:
这适用于什么 RDMS(mysql、Sql Server、Oracle 等)? 可能是基于last post的SQL 2008 【参考方案1】:似乎根本不需要 member_2 表,但这是您所拥有的忠实表示(保留 member_2)
SELECT *
FROM memberactions
INNER JOIN actions
ON memberactions.actionid = actions.id
INNER JOIN members
ON memberactions.memberid = members.id
OUTER APPLY (
select top(5) *
FROM actioncomments
inner join comments ON actioncomments.commentid = comments.id
inner join members members_2 ON members_2.id = actioncomments.memberid
WHERE actions.id = actioncomments.actionid
order by comments.id desc) comments
【讨论】:
试过了,但仍然得到所有的 cmets 我得到了列 'id' 被多次指定为 'cmets' @Yannick - 你really
需要内部查询中的哪些列,只需comments.*
?列出 OUTER APPLY 内部查询中 top(5) 旁边的那些(替换 *)
好的,我这样做了,但我知道我得到“数据提供者或其他服务返回和 E-FAIL 状态”——抱歉给您带来了麻烦,非常感谢。
@Yannick - 你应该在 SSMS 中尝试一下。如果这样可行,那么您需要在其他地方寻找前端层中的错误原因。【参考方案2】:
SELECT *
FROM
memberactions
INNER JOIN actions
ON memberactions.actionid = actions.id
INNER JOIN members
ON memberactions.memberid = members.id
LEFT OUTER JOIN members members_2
INNER JOIN actioncomments
ON members_2.id = actioncomments.memberid
OUTER APPLY
(SELECT TOP 5 * FROM comments C
WHERE actioncomments.commentid = comments.id
ORDER BY something)
ON actions.id = actioncomments.actioni
还是不知道你想点什么
【讨论】:
我删除了订单,但我得到“关键字'ON'附近的语法不正确”以上是关于来自特定帖子的前 5 条评论。如何编写我的 SQL的主要内容,如果未能解决你的问题,请参考以下文章