Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Здравствуйте, Qulac, Вы писали:
PD>>>Вот только с UNION вопрос. Таблицы-то сильно разные. В них вообще может не быть одинаковых по смыслу полей, кроме ID, и то, если он в них есть(они могли бы использовать ID базовой как свой PK). Что брать-то ? И как потом определить, откуда взяли ?
Q>>В чем проблема нужный запрос написать, sql поддерживает условные операторы CASE и IIF?
PD>Да ради бога, а что брать-то и как определить, откуда взяли
PD>В таблице группы есть одно поле number int. И FK на базовую
PD>В таблице факультет есть одно поле name varchar. И FK на базовую, конечно
PD>Что брать-то ?
Вот так например:
DECLARE @student_id INT = 2;
declare @faculty varchar(50);
declare @group varchar(50);
-- если у студента нету ссылки на факультет, то он зачислен в группу и все данные получаем по связи от группы
if((select count(*) from students inner join students_sets on students.students_set_id=students_sets.students_set_id
inner join faculties on faculties.faculties_id=students_sets.students_set_id
where students.students_id = @student_id) = 0)
begin
set @group = (select groups.number
from students
inner join students_sets on students.students_set_id=students_sets.students_set_id
inner join groups on groups.groups_id = students_sets.students_set_id
where students.students_id=@student_id)
set @faculty = (select faculties.Name
from students inner join students_sets on students.students_id=students_sets.students_set_id
inner join groups on students.students_set_id=groups.groups_id
inner join faculties on faculties.faculties_id= groups.faculties_id
where students.students_id=@student_id)
end
else
begin
set @faculty = (select faculties.Name
from students inner join students_sets on students.students_id=students_sets.students_set_id
inner join faculties on faculties.faculties_id=students_sets.students_set_id
where students.students_id = @student_id);
end
select @faculty as 'Факультет', @group as 'группа'