Соедините интервьюеров с таблицей связи и типами интервью, оставив тип с именем Java. Поле interview_id в таблице связи здесь трактуется как ID типа интервью.
Получение списка интервьюеров для определённого типа интервью
Соедините интервьюеров с таблицей связи и типами интервью, оставив тип с именем Java. Поле interview_id в таблице связи здесь трактуется как ID типа интервью.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В базе данных определены три таблицы:
create table INTERVIEW_TYPES
(
id int auto_increment primary key,
name varchar(255) not null,
constraint INTERVIEW_TYPES_name_uindex unique (name)
);
create table INTERVIEWERS
(
id int auto_increment primary key,
name varchar(255) not null,
constraint INTERVIEWERS_name_uindex unique (name)
);
create table INTERVIEWERS_INTERVIEW_TYPES
(
interview_id int not null,
interviewer_id int not null,
constraint INTERVIEWERS_INTERVIEW_TYPES_interview_id_interviewer_id_uindex unique (interview_id, interviewer_id)
);
Требуется составить запрос, который вернёт всех записей из таблицы INTERVIEWERS, у которых в связанной таблице INTERVIEW_TYPES присутствует запись с именем "Java".
Ответ
Соедините интервьюеров с таблицей связи и типами интервью, оставив тип с именем Java. Поле interview_id в таблице связи здесь трактуется как ID типа интервью.
SELECT i.*
FROM INTERVIEWERS i
JOIN INTERVIEWERS_INTERVIEW_TYPES link ON link.interviewer_id = i.id
JOIN INTERVIEW_TYPES t ON t.id = link.interview_id
WHERE t.name = 'Java';
Уникальность имени типа и пары в таблице связи исключает повторы интервьюеров для данного условия. Сама схема не объявляет внешние ключи в связующей таблице; их полезно добавить для целостности. EXISTS является равноценной альтернативой, особенно если уникальность данных не гарантирована.