Лучший способ возвратиться '1', если левое соединение возвращает какие-либо строки?

У меня есть три таблицы, '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 и также потому что я рассчитываю, где все, что я действительно хочу, - существует ли по крайней мере одно соответствие или нет. Это может быть улучшено?

6
задан Paul Tomblin 7 July 2010 в 15:12
поделиться

1 ответ

вместо этого используйте 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;
13
ответ дан 8 December 2019 в 18:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: