Сообщение Re[11]: и еще один вопрос по реляционной структуре от 01.11.2024 9:27
Изменено 01.11.2024 9:32 L_G
Re[11]: и еще один вопрос по реляционной структуре
PD>Вот только с UNION вопрос. Таблицы-то сильно разные. В них вообще может не быть одинаковых по смыслу полей, кроме ID, и то, если он в них есть(они могли бы использовать ID базовой как свой PK). Что брать-то ? И как потом определить, откуда взяли ?
Сорри, если не к месту вмешиваюсь и вообще уже поздно, но здесь я не понял — причём тут UNION, когда нужны просто два LEFT JOIN (или три для добавления в выборку данных по факультету в случае, когда студент в группе):
Сорри, если не к месту вмешиваюсь и вообще уже поздно, но здесь я не понял — причём тут UNION, когда нужны просто два LEFT JOIN (или три для добавления в выборку данных по факультету в случае, когда студент в группе):
select * from students s --вместо звездочки - нужные поля, естественно, разные из groups и faculties.
inner join facs_groups fg on s.fac_group_id=fg.id --джойн с базовой таблицей групп/факультетов
left join faculties f on f.id=fg.id --факультет; выбираемые поля f.* будут NULL, если студент в группе
left join groups g on g.id=fg.id --группа; выбираемые поля g.* будут NULL, если студент НЕ в группе
left join faculties ff on g.fac_id=ff.id --факультет по группе; выбираемые поля ff.* будут NULL, если студент НЕ в группеполя по факультету, чтобы не дублировать в выборке f.* и ff.*, логично выбирать через COALESCE(f.поле, ff.поле)Re[11]: и еще один вопрос по реляционной структуре
PD>Вот только с UNION вопрос. Таблицы-то сильно разные. В них вообще может не быть одинаковых по смыслу полей, кроме ID, и то, если он в них есть(они могли бы использовать ID базовой как свой PK). Что брать-то ? И как потом определить, откуда взяли ?
Сорри, если не к месту вмешиваюсь и вообще уже поздно, но здесь я не понял — причём тут UNION, когда нужны просто два LEFT JOIN (или три для добавления в выборку данных по факультету в случае, когда студент в группе):
Сорри, если не к месту вмешиваюсь и вообще уже поздно, но здесь я не понял — причём тут UNION, когда нужны просто два LEFT JOIN (или три для добавления в выборку данных по факультету в случае, когда студент в группе):
select * from students s --вместо звездочки - нужные поля, естественно, разные из groups и faculties.
inner join facs_groups fg on s.fac_group_id=fg.id --джойн с базовой таблицей групп/факультетов
left join faculties f on f.id=fg.id --факультет; выбираемые поля f.* будут NULL, если студент в группе
left join groups g on g.id=fg.id --группа; выбираемые поля g.* будут NULL, если студент НЕ в группе
left join faculties ff on g.fac_id=ff.id --факультет по группе; выбираемые поля ff.* будут NULL, если студент НЕ в группеполя по факультету, чтобы не дублировать в выборке f.* и ff.*, логично выбирать через COALESCE(f.поле, ff.поле) AS поле