上下文
当我试图返回消息值的行并找到它们对应的like计数(它们存储在不同的表中)时,我很难理解join语句的应用程序。我试图从中提取的第一个表包含我想要的消息:
SELECT forums.forum_id, forums.message FROM forums LIMIT 3
然后我试着使用结果 forum_id
要插入到第二个查询中的值,该查询将获得类似的计数:
SELECT COUNT(forumvotes.forum_id) AS voteCount FROM forumvotes JOIN forums ON forumvotes.forum_id = forums.forum_id
WHERE forumvotes.forum_id = [insert returned forum ids here]
问题
我相信我可以通过使用join将这两个查询组合成一个查询,但我不确定如何做到这一点。当我把两者结合起来的时候,新的 voteCount
column返回已插入的所有论坛投票数,而不仅仅是我想要的三条特定消息的赞数:
SELECT forums.forum_id, forums.message,
(SELECT COUNT(forumvotes.forum_id) AS voteCount FROM forumvotes JOIN forums ON forumvotes.forum_id = forums.forum_id WHERE forumvotes.forum_id = forums.forum_id) AS voteCount
FROM forums LIMIT 3
因此,查询返回三行,每行都包含invidual消息(这很好),但它们也返回相同的消息 voteCount
值为13,因为已经有13个赞插入到数据库中,但每行的 voteCount
值应该只有一个或两个,因为每条消息只有一个或两个赞。
如何将这两个查询合并为一个查询?如果有任何困惑,请告诉我。
3条答案
按热度按时间avwztpqn1#
您需要正确地将子查询与外部查询关联起来。问题是外部和内部使用相同的别名,因此
WHERE
子句实际上并不过滤任何内容。您应该使用表别名来避免这个问题。没有必要使用
forum
子查询中的表。你可以这样写:你还需要一个
ORDER BY
子句,如果希望结果在连续执行中保持一致。h22fl7wq2#
根据您对这一点的描述,您可能希望在这里执行一个“in”子查询。
具体来说,这将只返回前三个论坛行的id,并将它们与一些论坛信息连接起来
fv2wmkja3#
我
JOIN
将forums表转换为包含COUNT, GROUP BY
每个forum_id
```SELECT f.forum_id, f.message, a.voteCount
FROM forums f
JOIN (SELECT COUNT(forumvotes.forum_id) AS voteCount, forumvotes.forum_id
FROM forumvotes
GROUP BY forumvotes.forum_id) a ON f.forum_id = a.forum_id