如何从您的子查询中打印两个属性值 table

How to print two attribute values from your Sub query table

假设我有两个 table,

  1. 用户
  2. Post

Post 由用户创建(即 Post Table 将具有用户 的 外键)

现在我的问题是,

打印所有帖子超过10条的用户的详细信息

为了解决这个问题,我可以输入以下查询,它会给我想要的结果,

SELECT * from USER where user_id in (SELECT user_id from POST group by user_id having count(user_id) > 10)

当我还想打印 Post 的计数以及用户详细信息时,就会出现问题。现在无法从 USER table 获取用户数。这只能从 POST table 完成。但是,我无法从我的子查询中获取两个值,即我无法执行以下操作,

SELECT * from USER where user_id in (SELECT user_id, **count(user_id)** from POST group by user_id having count(user_id) > 10)

那么,我该如何解决这个问题呢?我知道的一个解决方案是这个,但我认为这是解决这个问题的一种非常幼稚的方法,并且会使查询变得更加复杂,也更加缓慢,

SELECT u.*, (SELECT po.count(user_id) from POST as po group by user_id having po.count(user_id) > 10) from USER u where u.user_id in (SELECT p.user_id from POST p group by user_id having p.count(user_id) > 10)

有没有其他方法可以使用子查询来解决这个问题?

您可以尝试加入表格,比起使用 SUBQUERY

更喜欢 JOIN
SELECT user.*, count( post.user_id ) as postcount
FROM user LEFT JOIN post ON users.user_id = post.user_id
GROUP BY post.user_id
HAVING postcount > 10 ;

将聚合移动到 from 子句:

SELECT u.*, p.num_posts
FROM user u JOIN
     (SELECT p.user_id, COUNT(*) as num_posts
      FROM post p
      GROUP BY p.user_id
      HAVING COUNT(*) > 10
     ) p
     ON u.user_id = p.user_id;

您可以使用子查询来做到这一点:

select u.*
from (select u.*,
             (select count(*) from post p where p.user_id = u.user_id) as num_posts
      from users u
     ) u
where num_posts > 10;

使用 post(user_id) 上的索引,这实际上可能比使用 JOIN/GROUP BY 的版本具有更好的性能。