我正在尝试创建一个查询,该查询连接主查询每一行的一些数据,但我不知道如何解决“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/