我现在已经尝试了1小时,尝试通过简单的SQL语法在INNER JOIN中找出如何从数据库中提取内容。
它几乎可以工作,我的问题是如何从表中选择多于一行。
我的SQL语法:
SELECT topics.topic_id, topics.topic_subject, COUNT(posts.post_topic) AS comments
FROM topics
INNER JOIN posts ON topics.topic_id = posts.post_topic = topics.topic_id
LIMIT 10
当然我不想使用WHERE语句,如果没有WHERE,它也不行。顺便说一句。我认为在ON之后这是错误的,但我不太确定。
谢谢!
答案 0 :(得分:5)
尝试:
SELECT topics.topic_id, topics.topic_subject, COUNT(posts.post_topic) AS comments
FROM topics
JOIN posts ON topics.topic_id = posts.post_topic
GROUP BY topics.topic_id, topics.topic_subject
LIMIT 10
COUNT是一个汇总函数,但您没有告诉数据库如何汇总(即汇总)数据。 GROUP BY子句声明应根据topic_id和topic_subject汇总数据。
如果您只选择topic_id为NULL的行,您希望得到什么? (我假设它是主键。)我希望什么都不会,除非帖子表中有一些孤立的帖子。
答案 1 :(得分:3)
你真的需要额外的topics.topic_id
吗?
SELECT topics.topic_id, topics.topic_subject, COUNT(posts.post_topic) AS comments FROM topics INNER JOIN posts ON topics.topic_id = posts.post_topic WHERE topic_id = 'NULL' LIMIT 10
另外,您确定表中有多个空行吗?
答案 2 :(得分:1)
符号:
ON topics.topic_id = posts.post_topic = topics.topic_id
可能被解释为:
ON topics.topic_id = (posts.post_topic = topics.topic_id)
可以被视为“将topic_id与post_topic进行比较并返回TRUE或FALSE;然后将topic_id与TRUE或FALSE进行比较并仅比较那些匹配的”,其中(很可能)TRUE被转换为1而FALSE为0。
或者分组可能是:
ON (topics.topic_id = posts.post_topic) = topics.topic_id
具有相同的净结果。
强烈推荐:删除多余的平等条件!
ON topics.topic_id = posts.post_topic
它使读者感到困惑,即使它不会混淆DBMS。