2014-07-18 69 views
1
SELECT `member_name.smf_members`, COUNT(`author.smf_links`) 
FROM smf_members, smf_links 
JOIN smf_links ON id_member.smf_members = author.smf_links; 
GROUP BY `author.smf_links` 

它說smf_links不是唯一的表/別名。我所要做的就是讓它計算出同一作者有多少行,並顯示成員名稱而不是作者(這是一個數字)和計數。SQL JOIN失敗 - 不是唯一的表/別名

所以不是: 1 | 23

它會顯示: 兔子| 23

我無法弄清楚這一點,而且我的大腦由於谷歌搜索而麻木不仁。有人可以幫我嗎? :)

+0

'member_name.smf_members'參數可能會顯示兔子,不是嗎?也許member_id或其他東西可以解決你的問題 – SerhatCan

+0

你真的需要加入'smf_links'兩次嗎?你同時擁有一個隱式聯接和一個顯式聯接。 – Barmar

+0

我只想顯示名稱,但不是id。該ID是我想要加入的。 Barmar你是什麼意思? –

回答

4

你得到的錯誤是因爲你加入了同一張表smf_links兩次。如果這就是你真正想做的事情,你需要給他們別名,以便你能區分它們。但我懷疑你錯了。

另外,語法是tablename.column,而不是column.table。而且你必須把反引號分別放在每個部分的周圍;如果.位於反引號內部,則將其視爲文字字符,而不是分隔符。

SELECT `smf_members`.`member_name`, COUNT(*) 
FROM smf_members 
JOIN smf_links ON smf_members.id_member = smf_links.author 
GROUP BY smf_links.author 
+0

明白了,謝謝! 不完全知道它是如何知道鏈接錶行數。你介意解釋一下嗎? :) –

+0

'JOIN'創建一個交叉產品,'COUNT(*)'計算該交叉產品的行數。你不需要在COUNT()中放置一個列名,除非你不需要對該列爲NULL的行進行計數。 – Barmar

+0

哦,對,非常感謝!我承認我有點生疏。仍然想事情太嚴格/字面上。 –