結合されたテーブルの 1 つが 1 対多の関係を持つ、非常に大きなクエリで COUNT を実行する必要があります。これは、1 対多テーブルの「多」側でアイテムが繰り返される回数をすべてのデータに乗算しているため、結果が狂っています。
これは、問題を強調するために関連部分のみを示すクエリの短縮版です。
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
1 対多の関係を持つ 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 を掛けたものです。これは、m_versions テーブルで version_id が繰り返される回数です。
version_id COUNT(trimtype)
44 45
54 35
69 45
214 50
216 30
282 5
290 50
この動作を回避するにはどうすればよいですか? ありがとう