您需要使用GROUP BY
:
SELECT messages_id
, title
, message
, user_id
, avatar_id
, avatar
, count(*) as commentCount
FROM messages
inner join avatar on messages.user_id = avatar.user_id
left join comments on messages.messages_id = comments.messages_id
GROUP BY messages_id
這應該工作,如果:
messages_id
是messages
user_id
獨特的獨特之處avatar
否則你需要指定fy你想得到的價值。
編輯:
我寫inner join
爲avatar
表中所有用戶想擁有一個化身。如果這不是真的,應該是left join
就像在你的查詢。
第二次嘗試
也許錯誤是,group by
應該messages.messages_id
而不是messages_id
。事實上,在其他RDMBS這是一個錯誤:
ERROR: column reference "messages_id" is ambiguous
我會更精確:
SELECT m.messages_id as id
, min(m.title) as title
, min(m.message) as message
, min(m.user_id) as user_id
, min(a.avatar_id) as avatar_id
, min(a.avatar) as avatar
, count(c.comments_id) as commentCount
FROM messages as m
left join avatar as a on m.user_id = a.user_id
left join comments as c on m.messages_id = c.messages_id
GROUP BY m.messages_id
所有min
可以在MySQL如果你確定要刪除,只有一個值。在標準SQL中,如果只有一個可以鍵入min
或max
,則必須選擇所需的值。
我更換頭像加入爲left join
。可能不是所有用戶都有頭像。
感謝大衛的回覆。但我仍然只獲得一條消息,而不是我在數據庫中的兩條消息。 Messages_id在消息中確實是唯一的,並且user_id在頭像中是唯一的。 也許我需要指定並非所有的郵件都有評論。 – moonwalker
@moonwalker檢查我寫的第二個查詢。如果不起作用有一個表格數據,預期輸出和實際輸出的例子。 – DavidEG
非常感謝大衛。你的第二個解決方案很好。我要研究它並試圖理解我做錯了什麼。 – moonwalker