0

優れたパフォーマンスのアプローチで SQL クエリを構築したいと考えています。すべてのカテゴリを選択し、このカテゴリに関連付けられているバンドをカウントする必要があります。

構造:

バンド:

 id       | band_name      |cat_id
----------|----------------|------------
 1        | Business 1     | 1  
 2        | Business 12    | 2
 3        | Business 123   | 2

カテゴリ:

id        | name           
----------|----------------
 1        | Business 1     
 2        | Business 12    
 3        | Business 123   

接続:

id        | band_id        |cat_id
----------|----------------|------------
 1        | 1              | 1  
 2        | 2              | 1
 3        | 2              | 1

クエリ:

SELECT c.name AS category_name, (SELECT COUNT(icc.band_id) FROM cms_bands_categories_connections AS icc RIGHT JOIN cms_bands AS ib ON icc.band_id = ib.id) AS bands_sum FROM 
                    cms_bands_categories AS c 
                 JOIN cms_bands_categories_connections AS cc ON 
                    c.id = cc.category_id 
                GROUP BY
                    c.id

結果は非常に奇妙です。bands_sum は各行で 3 に評価されます。私の構造を責めないでください。要件仕様の変更により、構造を変更する必要がありました。

4

1 に答える 1

1

集計ではなくサブクエリを使用するのはなぜですか?

SELECT c.name AS category_name, COUNT(cc.band_id) AS bands_sum
FROM cms_bands_categories c JOIN
     cms_bands_categories_connections cc
     ON c.id = cc.category_id 
GROUP BY c.id;

bandsそれらを数えるのにテーブルさえ必要ありません。その情報は接続テーブルにあります。

于 2013-08-22T20:38:14.093 に答える