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

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

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

  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