我正在尝试根据它与两个表的关系数对表(我们称之为父)进行排序,我们称它们为 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,但如果可能的话,我想坚持使用标准语法。