Как грамотно сделать выборку из нескольких таблиц (более 2-х: из 3-х, 4-х, 5-ти и тд.) на приведенном примере? - MySQL
Формулировка задачи:
Здравствуйте!
В MySQL несилен, только недавно приступил к изучению
Имеется три таблицы:
film
id filmname year
1 Фильм1 2006
2 Фильм2 2006
3 Фильм3 2005
Первичный ключ -id
hero
id heroame
1 Имя_Героя_1
2 Имя_Героя_2
3 Имя_Героя_3
Первичный ключ -id
И промежуточная таблица для связки обеих
film_hero
film_id hero_id
1 3
2 1
3 2
Первичный ключ - строка film_id и hero_id , в связке
То есть таблица создавалась запросом
строка 4, PRIMARY KEY: - Задача - вывести таблицу, где в левом столбце - название фильма (filmname), а в правом - имя героя (heroame) на основании промежуточной, результирующей, объединяющей таблицы film_hero, связывающей
Я сделал запрос (опытным путём его вывел)
Запрос1
Получил результат
filmname heroame
Фильм1 Имя_Героя_3
Фильм2 Имя_Героя_1
Фильм3 Имя_Героя_2
Вроде все верно
Потом хочу получить Фильм в Котором есть определённая роль Задача2
Если указываю id из hero.id - то вроде все верно показывает
Запрос2
Вывод
filmname heroame
Фильм1 Имя_Героя_3
Но если мне надо искать именно по имени героя, а не id (так удобнее)
То при запросе
Запрос3
ничего не выводит! - И ошибку не создает
Вопрос:
1.) В Запросе1 я вынужден был использовать костыли- только чего знаю, и у меня ощущение что я через пень колоду запрос вывел, исходя из заданной задачи, и умеючи его можно было другим, более изящным запросом вывести, осуществить, решить задачу, - не подскажете- Каким?
2.) В Запросе 3 - что не так, что неверно? Почему по hero.id из запроса 2 - выводит корректно, что мне надо, а по запросу 3 - пустое поле выдает, ничего.
3.)Я создавая таблицу промежуточную назвал столбцы как film_id и hero_id
3.1)Можно ли их было назвать film.id и hero.id,
Или с точки зрения языка MySQL - это некорректно и вызовет конфликт?
3.2)Если - можно, - то насколько нужно их так назвать
3.3)Как вообще лучше было бы назвать столбцы промежуточной таблицы film_hero.
Спасибо!
Буду благодарен если ответите на все 5 вопросов
PRIMARY KEY (film_id, hero_id)
CREATE TABLE film_hero ( film_id INT NOT NULL, hero_id INT NOT NULL, PRIMARY KEY (film_id, hero_id) ) DEFAULT CHARACTER SET utf8 ENGINE=InnoDB
select filmname, heroname from film, hero, film_hero where film_id=film.id and hero_id=hero.id
select filmname, heroname from film, hero, film_hero where film_id=film.id and hero_id=hero.id and hero.id =3
select filmname, heroname from film, hero, film_hero where film_id=film.id and hero_id=hero.id and hero.heroname="Имя_Героя_3"
Решение задачи: «Как грамотно сделать выборку из нескольких таблиц (более 2-х: из 3-х, 4-х, 5-ти и тд.) на приведенном примере?»
textual
Листинг программы
create table f ( id int, fdsc char(15), g int, constraint fpk_id primary key (id) ) default character set = cp1251; insert into f values (1, 'Фильм1', 2006), (2, 'Фильм2', 2006), (3, 'Фильм3', 2005); create table h ( id int, hdsc char(15), constraint hpk_id primary key (id) ) default character set = cp1251; insert into h values (1, 'Имя_Героя_1'), (2, 'Имя_Героя_2'), (3, 'Имя_Героя_3'); select * from f; select * from h; create table fh ( f_id int, h_id int, constraint foreign key (f_id) references f(id), constraint foreign key (h_id) references h(id) ) default character set = cp1251; insert into fh values (1, 3), (2, 1), (3, 2); select * from f, h, fh where f_id = f.id and h_id = h.id and h.hdsc = 'Имя_Героя_3'; select f.fdsc, h.hdsc from fh join f on fh.f_id = f.id join h on fh.h_id = h.id where h.hdsc = 'Имя_Героя_3';
Объяснение кода листинга программы
- Создание таблицы
f
с полямиid
,fdsc
,g
. - Вставка данных в таблицу
f
. - Создание таблицы
h
с полямиid
,hdsc
. - Вставка данных в таблицу
h
. - Выборка всех данных из таблицы
f
иh
. - Создание таблицы
fh
с полямиf_id
,h_id
, constraints внешнего ключа. - Вставка данных в таблицу
fh
. - Выборка всех данных из таблиц
f
,h
,fh
, гдеf_id
равенid
в таблицеf
иh_id
равенid
в таблицеh
, иh.hdsc
равно 'Имя_Героя_3'. - Выборка полей
fdsc
иhdsc
из таблицыfh
, используя операторы JOIN для соединения таблицf
иh
. - Ограничение выбора данных, где
h.hdsc
равно 'Имя_Героя_3'.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д