Эффективный SQL-запрос с подзапросом и несколькими объединениями - PullRequest
1 голос
/ 10 сентября 2011

У меня есть следующий запрос SQL, который выполняет подзапрос и объединяет две таблицы, которые затем объединяются с первичной таблицей:

SELECT a.id, cgso.sf_guard_user_id as cgso, cgal.sf_guard_user_id as cgal
FROM table_a a
JOIN (  SELECT cgso.sf_guard_user_id, cgso.speciality_id
        FROM table_c g
        JOIN  table_b as  cgso
            ON g.user_id = cgso.sf_guard_user_id and g.group_id = 2) as cgso
    ON a.speciality_id = cgso.speciality_id
JOIN (  SELECT cgal.sf_guard_user_id, cgal.speciality_id
        FROM table_c g
        JOIN  table_b as  cgal
            ON g.user_id = cgal.sf_guard_user_id and g.group_id = 1) as cgal
    ON a.speciality_id = cgal.speciality_id

Вывод запроса:

id | cgso | cgal
----------------
 1 |  2   | 54

Вывод в порядке и, как предполагалось, однако есть ли более эффективный способ получить тот же вывод? Любые советы или рекомендации будут высоко оценены.

Спасибо

1 Ответ

2 голосов
/ 10 сентября 2011

Вы должны просто упростить объединения ...

SELECT a.id, cgso.sf_guard_user_id as cgso, cgal.sf_guard_user_id as cgal
FROM table_a a
INNER JOIN table_c g2 ON g1.group_id = 2
INNER JOIN table_b cgso ON g2.user_id = cgso.sf_guard_user_id  AND cgso.specialty_id = a.specialty_id
INNER JOIN table_c g1 ON g1.user_id = 1
INNER JOIN table_b cgal ON g1.user_id = cgal.sf_guard_user_id AND cgal.specialty_id = a.specialty_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...