Как грамотно сделать выборку из нескольких таблиц (более 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: -

PRIMARY KEY (film_id, hero_id)

Листинг программы
  1. CREATE TABLE film_hero (
  2. film_id INT NOT NULL,
  3. hero_id INT NOT NULL,
  4. PRIMARY KEY (film_id, hero_id)
  5. ) DEFAULT CHARACTER SET utf8 ENGINE=InnoDB
Задача - вывести таблицу, где в левом столбце - название фильма (filmname), а в правом - имя героя (heroame) на основании промежуточной, результирующей, объединяющей таблицы film_hero, связывающей Я сделал запрос (опытным путём его вывел) Запрос1
Листинг программы
  1. select filmname, heroname
  2. from film, hero, film_hero
  3. where film_id=film.id and hero_id=hero.id
Получил результат filmname heroame Фильм1 Имя_Героя_3 Фильм2 Имя_Героя_1 Фильм3 Имя_Героя_2 Вроде все верно Потом хочу получить Фильм в Котором есть определённая роль Задача2 Если указываю id из hero.id - то вроде все верно показывает Запрос2
Листинг программы
  1. select filmname, heroname
  2. from film, hero, film_hero
  3. where film_id=film.id and hero_id=hero.id and hero.id =3
Вывод filmname heroame Фильм1 Имя_Героя_3 Но если мне надо искать именно по имени героя, а не id (так удобнее) То при запросе Запрос3
Листинг программы
  1. select filmname, heroname
  2. from film, hero, film_hero
  3. where film_id=film.id and hero_id=hero.id and hero.heroname="Имя_Героя_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 вопросов

Решение задачи: «Как грамотно сделать выборку из нескольких таблиц (более 2-х: из 3-х, 4-х, 5-ти и тд.) на приведенном примере?»

textual
Листинг программы
  1. create table f (
  2.     id int,
  3.     fdsc char(15),
  4.     g int,
  5.     constraint fpk_id primary key (id)
  6. ) default character set = cp1251;
  7. insert into f values (1, 'Фильм1', 2006), (2, 'Фильм2', 2006), (3, 'Фильм3', 2005);
  8.  
  9. create table h (
  10.     id int,
  11.     hdsc char(15),
  12.     constraint hpk_id primary key (id)
  13. ) default character set = cp1251;
  14.  
  15. insert into h values (1, 'Имя_Героя_1'), (2, 'Имя_Героя_2'), (3, 'Имя_Героя_3');
  16.  
  17. select * from f;
  18. select * from h;
  19.  
  20. create table fh (
  21.     f_id int,
  22.     h_id int,
  23.     constraint foreign key (f_id) references f(id),
  24.     constraint foreign key (h_id) references h(id)
  25. ) default character set = cp1251;
  26.  
  27. insert into fh values (1, 3), (2, 1), (3, 2);
  28.  
  29. select * from f, h, fh
  30. where f_id = f.id and h_id = h.id and h.hdsc = 'Имя_Героя_3';
  31.  
  32. select f.fdsc, h.hdsc from fh
  33.     join f on fh.f_id = f.id
  34.     join h on fh.h_id = h.id
  35. where h.hdsc = 'Имя_Героя_3';

Объяснение кода листинга программы

  1. Создание таблицы f с полями id, fdsc, g.
  2. Вставка данных в таблицу f.
  3. Создание таблицы h с полями id, hdsc.
  4. Вставка данных в таблицу h.
  5. Выборка всех данных из таблицы f и h.
  6. Создание таблицы fh с полями f_id, h_id, constraints внешнего ключа.
  7. Вставка данных в таблицу fh.
  8. Выборка всех данных из таблиц f, h, fh, где f_id равен id в таблице f и h_id равен id в таблице h, и h.hdsc равно 'Имя_Героя_3'.
  9. Выборка полей fdsc и hdsc из таблицы fh, используя операторы JOIN для соединения таблиц f и h.
  10. Ограничение выбора данных, где h.hdsc равно 'Имя_Героя_3'.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут