Как соотнести таблицу более одного раза в SQL? - PullRequest
0 голосов
/ 02 марта 2020

Я хочу связать две таблицы и таблицу отношений. Таблицы: Person с его первичным ключом с именем id_person, Activity с его первичным ключом с именем id_activity и таблицей, которая относится к двум предыдущим таблицам: Activity_Person, которая содержит в качестве первичного и внешнего ключей id_activity и id_person.

Чтобы связать эти таблицы с использованием старого формата JOIN, это будет работать:

select * from activity, person, activity_person
where activity.id_activity = activity_person.id_activity and person.id_person = activity_person.id_person;

Это покажет действия, в которых каждый человек принял участие.

Но теперь я узнаю о JOIN с и не знаю, какой правильный формат для связи таблицы, которая появляется дважды (Activity_Person).

Я пробовал это:

select * from 
person inner join activity_person on person.id_person = activity_person.id_person,
activity inner join activity_person on activity.id_activity = activity_person.id_activity;

Но я получаю следующую ошибку:

Не уникальная таблица / псевдоним: 'activity_person'

Какой правильный формат?

Ответы [ 3 ]

0 голосов
/ 02 марта 2020

Я думаю, вы просто хотите два объединения:

select *
from person p inner join
     activity_person ap
     on p.id_person = ap.id_person inner join
     activity a
     on a.id_activity = ap.id_activity;

Я не уверен, почему вы пытаетесь повторить activity_person в своем запросе.

Также обратите внимание, что псевдонимы таблиц делают запрос легче писать и читать.

0 голосов
/ 02 марта 2020

Ваш синтаксис неправильный.

select * from activity, person, activity_person
where activity.id_activity = activity_person.id_activity
      and person.id_person = activity_person.id_person;

Эквивалентно:

select *
from person
inner join activity_person
on person.id_person = activity_person.id_person -- <- remove the comma there
inner join activity
on activity.id_activity = activity_person.id_activity;

По сути, синтаксис такой:

SELECT <the fields to select>
FROM <table name>
JOIN <table to join>
ON <joining condition>
-- if you want to add another table :
JOIN <new table to join>
ON <joining condition>
0 голосов
/ 02 марта 2020

Вам не нужно activity_person дважды здесь. Просто сделай

select *
    from person
    inner join activity_person on person.id_person = activity_person.id_person
    inner join activity on activity.id_activity = activity_person.id_activity;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...