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

Posted

技术标签:

【中文标题】如何从您的子查询表中打印两个属性值【英文标题】:How to print two attribute values from your Sub query table 【发布时间】:2021-10-01 17:41:39 【问题描述】:

假设我有两张桌子,

    用户 发布

帖子由用户发布(即帖子表将具有用户的外键

现在我的问题是,

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

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

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

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

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)

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

【问题讨论】:

用您正在使用的数据库标记您的问题。 @GordonLinoff 好的,我正在做。 【参考方案1】:

将聚合移动到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 的版本具有更好的性能。

【讨论】:

非常感谢您的回答...是否也可以使用子查询来做到这一点?【参考方案2】:

您可以尝试加入表格,更喜欢使用JOIN 而不是使用SUBQUERY

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 ;

【讨论】:

非常感谢您的回答! ^_^ 你能告诉我是否也可以对子查询做同样的事情吗?在这种情况下,为什么您更喜欢 Left Join?它不会显示所有用户(实际上,问题只需要那些拥有 10+ 帖子的用户) 我已经编辑了我的答案以检索帖子数大于 10 的用户,我更喜欢左加入的原因是因为如果没有帖子,您将获得所有用户(基于我之前的回答现在不太相关)。The retrieval time of the query using joins almost always will be faster than that of a subquery 所以我建议使用 join。

以上是关于如何从您的子查询表中打印两个属性值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用具有多个结果的子查询将值插入表中?

ORACLE 子查询 嵌套查询 多值子查询

如何在 SQL Server 中同时连接两个数据库?

相关子查询 与非相关子查询

转载---相关子查询和非相关子查询

如何按数据属性查询(不列出)子数据库