如果沒有代表性數據進行測試的好處,我的猜測是加入的5個表格已將行數相乘,因此總數不正確。在COUNT()中使用DISTINCT可能會有所幫助,例如
SELECT
COUNT(DISTINCT calls.id)
+ COUNT(DISTINCT meetings.id)
+ COUNT(DISTINCT tasks.id) AS 'total'
, users.user_name AS 'name'
, GROUP_CONCAT(DISTINCT accounts.name) AS 'accounts'
FROM accounts
INNER JOIN calls ON accounts.id = calls.parent_id
INNER JOIN users ON calls.assigned_user_id = users.id
INNER JOIN meetings ON accounts.id = meetings.parent_id
AND meetings.assigned_user_id = users.id
INNER JOIN tasks ON accounts.id = tasks.parent_id
AND tasks.assigned_user_id = users.id
GROUP BY
users.user_name
;
注意我已經交換過的WHERE子句更現代的方式加盟的老樣子,你真的應該加入。
另一種可能性是,你的罪名是不正確的,因爲你使用的內部連接這要求兩個表中的數據都存在用於返回行的數據。所以也許你需要一些LEFT OUTER JOIN。
SELECT
COUNT(DISTINCT calls.id)
+ COUNT(DISTINCT meetings.id)
+ COUNT(DISTINCT tasks.id) AS 'total'
, users.user_name AS 'name'
, GROUP_CONCAT(DISTINCT accounts.name) AS 'accounts'
FROM accounts
LEFT OUTER JOIN calls ON accounts.id = calls.parent_id
LEFT OUTER JOIN users ON calls.assigned_user_id = users.id
LEFT OUTER JOIN meetings ON accounts.id = meetings.parent_id
AND meetings.assigned_user_id = users.id
LEFT OUTER JOIN tasks ON accounts.id = tasks.parent_id
AND tasks.assigned_user_id = users.id
GROUP BY
users.user_name
;
最後的查詢可能是一個混合的加入,某種內在的和有些人離開。
您能告訴我們一些樣本數據和預期的輸出嗎? –
GROUP BY名稱,accounts.name? – Mihai
總數如何不正確?你能向我們展示樣本數據,以及你得到的結果是什麼? – mjuarez