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
私はそれを間違っていると思います...そうですか?
あなたのソリューションは機能するはずですが、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
あなたは正しい-あなたは間違った方法でそれをします。うまくいきますが、それはあなたが望む結果を得るための間違った方法です。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