来自特定帖子的前 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的主要内容,如果未能解决你的问题,请参考以下文章

获取帖子列表的最新 3 条评论

SQL查询从数据库中的一个表中获取所有帖子,但来自特定用户的最多5个条目? [复制]

答案或评论链接如何工作?

关于如何在猫鼬中编写评论模式的任何想法?

关于如何在猫鼬中编写评论模式的任何想法?

HQL/SQL 根据计数选择前 10 条记录