mysql - 如何正确编写子查询来获取每个帖子的评论数量?

标签 mysql sql sqlite

我正在尝试返回一个 sqlite3 查询,该查询将允许我循环浏览社交媒体帖子并显示帖子和用户详细信息以及每个帖子的评论数量。

我不知道如何编写一个 SQL 查询来获取帖子的评论数。

这是我在 ERD 中的数据库方案:

enter image description here

这是我的查询:

SELECT u.name, u.icon, p.date, p.title, p.message,
       (SELECT comment.postId, COUNT(comment.Id) 
        FROM comment
        WHERE comment.postID = p.Id) as commentno
FROM Post p, User u
WHERE p.userID = u.Id

当我尝试运行它时我看到什么:

Error: sub-select returns 2 columns - expected 1

我想看到的内容:

Michael Scott, Michael.png, 2019-08-27, "Blog title", "Blog message", 7

最佳答案

请参阅我上面的评论。我认为你的意图是这样的:

    SELECT u.name, u.icon, p.date, p.title, p.message,
       c.postId, COUNT(c.Id) as commentno             
        FROM Post p LEFT JOIN  User u ON p.userID = u.Id
        LEFT JOIN Comment c on p.ID = c.PostID
        GROUP BY  u.name, u.icon, p.date, p.title, p.message, c.postId

更新 正如所指出的,我原来的答案有同样的错误(因为我只是快速移动了别名。这里我重新格式化您的查询以使用 JOINs 。我假设您的 Post 表有评论 ID,但您可以找出适合 JOIN 的列。

关于mysql - 如何正确编写子查询来获取每个帖子的评论数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57702287/

相关文章:

不存在的 SQL 查询非常慢

php - 如何访问WordPress插件变量/MySQL数据?

mysql - order by 的奇怪问题,wordpress 查询中的内部连接

MySQL - 使用内部连接更新正在创建空值

c++ - SQLite:通过 100K 元素列表进行选择

java - getInstance(this) 不适用于没有 Activity 的类

java - GreenDao 不创建外键?

c# - 从 MySQL C# 中的表中获取前 3 名

php - MySQL Now() 在两个日期时间时区之间

sqlite查询对子查询的结果进行简单的计算