Получить значение через три таблицы в одном запросе - PullRequest
0 голосов
/ 01 марта 2012

Я уже некоторое время пытаюсь понять объединения, я заметил довольно много примеров, показывающих, как получить значение на основе запроса из двух таблиц, используя левое / внутреннее соединение.Я постараюсь нарисовать свой пример для всех вас, надеюсь, он поможет в объяснении моего вопроса.

Table 1:
project_id  |  project_name
    1          super-project

Table 2:
project_id  |  course_id       ---> project_id and course_id are foreign keys here.
    1              3

Table 3:
course_id  |  course_name      ---> course_id is a primary key here
    3      |  Writing 101

Моя цель:

Я бы хотелчтобы иметь возможность вернуть «Writing 101», используя project_id.Итак, если я знаю, что project_id равен 1, я бы запросил базу данных, чтобы найти, что course_id, связанный с текущим проектом, равен 3.Затем я использовал бы курс_идентификатора 3 для запроса таблицы 3 и обнаружил, что имя связанного курса - writing 101.

Есть ли способ сделать это в одном запросе, используя соединениекакой-то?

Ответы [ 2 ]

3 голосов
/ 01 марта 2012
select course_name from Table3
inner join Table2
on Table2.course_id = Table3.course_id
where Table2.project_id = 1

Обратите внимание, что требуется только 1 присоединение!

Также обратите внимание, что если project_id = 1 присутствует в более чем одном курсе, все эти курсы появятся.

Можете ли вы объяснить, почему требуется только одно объединение, в отличие от ответа ниже, который требует двух объединений?

Другой ответ не требует двух объединений. Поскольку project_id присутствует в «средней» таблице, нет необходимости искать его в Table1. Теперь, если вам требуется название проекта (а это не так, потому что вы не упомянули об этом в вопросе), вам придется присоединиться к Table1

1 голос
/ 01 марта 2012

Вот, пожалуйста:

SELECT c.course_name
FROM Table3 c
INNER JOIN Table2 pc ON pc.course_id = c.course_id
INNER JOIN Table1 p ON p.project_id = pc.project_id
WHERE project_id = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...