具有多行的SQL语法

时间:2010-06-27 03:49:24

标签: php mysql database join

我现在已经尝试了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之后这是错误的,但我不太确定。

谢谢!

3 个答案:

答案 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。