簡體   English   中英

具有多行的SQL語法

[英]SQL syntax with more than one row

我現在已經嘗試了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之后這是錯誤的,但我不太確定。

謝謝!

嘗試:

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是一個匯總函數,但您沒有告訴DB如何匯總(即匯總)數據。 GROUP BY子句聲明應根據topic_id和topic_subject匯總數據。

如果您只選擇topic_id為NULL的行,您希望得到什么? (我假設它是主鍵。)我希望什么都不會,除非在帖子表中有一些孤立的帖子。

你真的需要額外的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

此外,您確定表中有多個空行嗎?

符號:

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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM