[英]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.