Üç tablo var, 'A', 'B' ve 'C'. 'A' ve 'B' ile ilgili bir sorgum var, ancak bir veya daha fazla (kaç tane umurumda değil) 'C' olduğunu ve 'A'ya' yabancı anahtarlı olup olmadığını söyleyen bir alan eklemek istiyorum.Bir sol birleşim herhangi bir satır döndürürse '1' değerini döndürmenin daha iyi bir yolu?
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;
Biraz verimsiz görünüyor, gerçekten istediğim tüm olup olmadığını nerede olduğunu sayıyorum çünkü ve ayrıca GROUP BY
tüm bu alanları listelemek zorunda hem çünkü: Burada
Var. Sayımı sıralamak ve tablolamak maliyetlidir, ancak belki de daha maliyetli olması, DB'nin bu sayımı elde etmek için Çizelge C'deki TÜM satırlardan geçmesi gerektiğidir. EXISTS çözümü ile ilk eşleşen satırı bulur bulmaz aramayı durdurabilir. –
İyi bir açıklama, @ Tom. –