2 つのテーブル (Child1 と Child2 と呼びましょう) に対するリレーションの数でテーブル (親と呼びましょう) を並べ替えようとしています。今、私は次のようにしています:
SELECT Master.id
(SELECT COUNT(*) FROM Child1 WHERE Child1.id=Master.id)
+ (SELECT COUNT(*) FROM Child2 WHERE Child2.id=Master.id) AS score
ORDER BY score DESC;
期待どおりに機能しますが、サブクエリの中間値が何であるかを知る方法がないため、維持するのが困難です。私がしたいことは次のとおりです。
SELECT Master.id
(SELECT COUNT(*) FROM Child1 WHERE Child1.id=Master.id) AS child1_score,
(SELECT COUNT(*) FROM Child2 WHERE Child2.id=Master.id) AS child2_score,
child1_score + child2_score AS score
ORDER BY score DESC;
しかし、child1_score と child2_score が定義されていないというエラーが表示されます。これを行うと考えることができる唯一のクリーンな方法は、ネストされたサブクエリの追加レベルを使用することです。
SELECT child1_score + child2_score AS score, id FROM
(SELECT Master.id
(SELECT COUNT(*) FROM Child1 WHERE Child1.id=Master.id) AS child1_score,
(SELECT COUNT(*) FROM Child2 WHERE Child2.id=Master.id) AS child2_score)
ORDER BY score DESC;
しかし、それは記憶にとってはるかに悪いようです。
私が見ていないこれに対処するより良い方法はありますか?私は MySQL を使用していますが、可能であれば標準の構文に固執したいと考えています。