1

1 つのクエリで、子を持つ親と各親の子の数を選択する必要があります。今、私は次のクエリを使用します:

SELECT table_a.*, (SELECT COUNT(*) FROM table_b WHERE table_b.LID=table_a.LID AND table_b.Yes=0) AS Co
FROM table_a 
WHERE table_a.Ind>0 ORDER BY table_a.Ind ASC

私はそれを間違っていると思います...そうですか?

4

2 に答える 2

1

あなたのソリューションは機能するはずですが、subselect get はすべての行に対して実行され、table_a最適なソリューションではありません。より良い解決策は、JOIN両方のテーブルに対して a を使用しGROUP BYて、より低いパフォーマンス コストで同じ結果を取得することです。

SELECT table_a.LID
       , COUNT(*) AS Co
FROM   table_a
       LEFT OUTER JOIN table_b ON table_b.LID = table_a.LID AND table_b.Yes = 0
WHERE  table_a.Ind > 0 
GROUP BY
       table_a.LID
ORDER BY 
       table_a.Ind ASC

また、私の意見では、常にテーブルにエイリアスを設定し、そのエイリアスを使用して、ステートメントをもう少し簡潔で読みやすくする必要があります。

SELECT a.LID
       , COUNT(*) AS Co
FROM   table_a AS a
       LEFT OUTER JOIN table_b AS b ON b.LID = a.LID AND b.Yes = 0
WHERE  a.Ind > 0 
GROUP BY
       a.LID
ORDER BY 
       a.Ind ASC
于 2012-05-26T20:11:24.087 に答える
1

あなたは正しい-あなたは間違った方法でそれをします。うまくいきますが、それはあなたが望む結果を得るための間違った方法です。1 対多の関係から合計を取得するために、結合とグループ化を使用します。

SELECT a.ind, count(*) Total 
FROM a JOIN b ON a.lid = b.lid
WHERE a.ind>0 AND b.yes = 0
GROUP BY a.ind
ORDER BY a.ind 
于 2012-05-26T20:11:49.013 に答える