mysql - 将数据从父查询传递到子查询

标签 mysql sql

我正在尝试创建一个查询,该查询连接主查询每一行的一些数据,但我不知道如何解决“where 子句”中的未知列“cm.index”问题。如何将父查询行的列值传递给子查询?

父查询中的每一行都有一个索引整数。我想计算消费索引大于每条消息索引的 channel_members 数量。

Here是一个示例数据库

SELECT read_count.*, cm.*
FROM   chat_messages as cm
JOIN (SELECT b.chat_channel_id, Count(b.chat_channel_id) AS members_read 
    FROM   channel_members b
    WHERE  b.consumption_index >= cm.index 
    GROUP  BY b.chat_channel_id) read_count 
ON cm.channel_id = read_count.chat_channel_id
WHERE cm.channel_id=5;

最佳答案

您要加入的子查询不是相关子查询,因此您无法将主查询中的列传递到其中,它们必须在 ON 条件下相关。

您应该更改子查询以将 cm.index 包含在分组中。然后你就可以加入了。

SELECT cm.*, SUM(rc.members_read) AS members_read
FROM chat_messages AS cm
JOIN (SELECT chat_channel_id, consumption_index, COUNT(*) AS members_read
      FROM channel_members
      GROUP BY chat_channel_id, consumption_index) AS rc
ON cm.channel_id = rc.chat_channel_id AND rc.consumption_index >= cm.index
WHERE cm.channel_id = 5

或者您可以将其作为真正的相关子查询来执行,该子查询位于 SELECT 列表中。

SELECT cm.*, 
    (SELECT COUNT(*)
    FROM channel_members AS b
    WHERE b.chat_channel_id = cm.channel_id AND b.consumption_index = cm.index) AS members_read
FROM chat_messages AS cm
WHERE cm.channel_id = 5

关于mysql - 将数据从父查询传递到子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46964436/

相关文章:

php - sql 列出带有左连接的游戏和总评论?

MySQL更新加入限制

sql - 子查询是邪恶的吗?

python - Python 中的 Unicode 问题

mysql - 显示第 0 - 9 行(总共 10 行,查询耗时 0.0002 秒)[LatestMoodTime : [BLOB - 10B] - [BLOB - 0B]]

mysql一对一消息优化表查询

sql - Oracle 11g 得到两个计数并将它们相除

python - Unicode解码错误: 'utf8' codec can't decode byte 0xc7 in position 27: invalid continuation byte django

MySQL从一个表中选择同时需要来自其他表的数据

mysql - PHP PDO 清理用户输入