如何从您的子查询中打印两个属性值 table
How to print two attribute values from your Sub query table
假设我有两个 table,
- 用户
- 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
的版本具有更好的性能。
假设我有两个 table,
- 用户
- 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
的版本具有更好的性能。