我需要在相當大的查詢上執行COUNT,其中一個連接表具有一對多關係。這是拋棄我的結果,因爲所有數據都乘以在一對多表的「多」一邊重複項目的次數。與一對多表連接的mysql數(*)
這是查詢的縮短版只顯示相關的部分突出問題:
SELECT COUNT(trimtype) FROM versiontrim
INNER JOIN trims USING (trim_id)
INNER JOIN prices USING(version_id)
INNER JOIN m_versions USING(version_id)
WHERE trimtype IN('sec', 'help') AND price BETWEEN 200001 AND 210000
GROUP BY version_id
所有表都只是m_versions相當簡單明瞭具有一個一對多的關係,看起來是這樣的:
version_id serv_id
1 1
1 2
1 3
1 4
1 5
.... and so on
查詢的預期結果是:
version_id COUNT(trimtype)
44 9
54 7
69 9
214 10
216 6
282 1
290 10
相反,我正在此,即所有罪狀乘以5這是VERSION_ID在m_versions表重複次數:
version_id COUNT(trimtype)
44 45
54 35
69 45
214 50
216 30
282 5
290 50
如何避免這種情況? 謝謝
如果你用'COUNT(DISTINCT trimtype)'更換? –
如果你用'COUNT(DISTINCT trimtype)'替換它,最大值將是'2',因爲你只在'where'子句中爲'2'值過濾。 '在哪裏trimtype IN('sec','help')....' –
JW是對的。我對trimtype和version_id都嘗試了DISTINCT,但沒有得到我正在尋找的內容。 – BernardA