세 개의 테이블 'A', 'B'및 'C'가 있습니다. 나는 'A'와 'B'에 대한 질의를 가지고 있지만, 나는 하나 이상의 ('얼마나 많은'상관 없어) 'C'가 외국어 인 'A'가 있는지 여부를 알려주는 필드를 추가하고 싶다.왼쪽 조인에서 행을 반환하는 경우 '1'을 반환하는 더 좋은 방법은 무엇입니까?
SELECT A.A_id, A.col_2, col_3, B.col_2, A.col_4
count(C.id) as C_count
FROM A
JOIN B ON (A.B_id = B.B_id)
LEFT JOIN C ON (A.A_id = C.A_id)
WHERE A.A_id = ?
GROUP BY A.A_id, A.col_2, col_3, B.col_2, A.col_4
ORDER BY CASE WHEN A.col_2 = ?
THEN 0
ELSE 1
END, col_3;
그것은 조금 비효율적 인 것 같다, 내가 정말 원하는 모든이 있는지 어디에 나는 믿는다 때문에 또한 GROUP BY
의 모든 필드를 나열해야하므로이 두 : 여기
존재한다. 수를 정렬하고 표로 만드는 것은 비용이 많이 들지만 더 많은 비용이 드는 것은 DB가 그 수를 얻기 위해 표 C의 모든 행을 거쳐야한다는 것입니다. 첫 번째로 일치하는 행을 찾으면 곧바로 EXISTS 솔루션을 사용하여 검색을 중지 할 수 있습니다. –
좋은 설명, @Tom. –