У меня есть три таблицы, 'B' и 'C'. У меня есть запрос на и 'B', но я хочу добавить поле, которое говорит мне, существует ли один или несколько (я' не забочусь, сколько) 'C', которые являются внешние адресуемый 'A'.
Вот то, что я имею:
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
и также потому что я рассчитываю, где все, что я действительно хочу, - существует ли по крайней мере одно соответствие или нет. Это может быть улучшено?
вместо этого используйте Exists с подзапросом ...
Select A.A_id, A.col_2, col_3,
B.col_2, A.col_4,
Case When Exists (Select * From C
Where A_id = A.A_id)
Then 1 Else 0 End As C_Exists
From A Join B
On (A.B_id = B.B_id)
Where A.A_id = ?
Order By Case When A.col_2 = ?
Then 0 Else 1 End, col_3;