테이블을 정렬하려고합니다 (부모라고 부르겠습니다). 두 테이블에 대한 관계의 수로 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을 사용하고 있지만 가능한 경우 표준 구문을 고수하고 싶습니다. 마지막으로 쿼리를 기반으로
는
당신의 해결책은 나에게 잘 어울리는 것 같습니다. – Strawberry