首页 > 解决方案 > 对先前查询的每个结果迭代地执行 SQL 查询

问题描述

这是一个 SQL 查询,用于检索用户 1 的所有消息类型 6 的消息。

SELECT COUNT(*)
FROM messages
WHERE messageType = '6' AND userId = '1'

假设我想写一个这样的查询,但不是只返回用户 1 的计数,而是返回一个表,其中包含表“用户”中每个用户的计数。

我将如何构建这样的东西?似乎我需要在这里使用类似于 for 循环的东西,但看起来 SQL 没有这样的东西。

标签: sql

解决方案


如果您打算从“用户”表中打印所有用户的列表,而不管“消息”表中是否存在与这些用户相关的任何相关消息。

下面的 SQL 将打印来自 'users' 和 'messages' 表的所有用户及其各自计数的列表。对于那些在“消息”表中没有相关消息的用户,它将显示“零”作为用户计数。

假设 - 'users' 表中的 'Id' 列代表 userId。

SELECT u.id, NVL(COUNT(1),0) as count_of_users
FROM users u left join messages m on u.id = m.userid and m.messageType = '6'
Group by u.id;

推荐阅读