Как сделать выборку из таблицы где связь многие ко многим
Задача получиться имя тоня и книги, которая она написала. Попытки не венчались успехом. Остановился на приблеженной идеи, где получается получить только ид. Как получить имя и название книг ?
create table Author (
id int primary key auto_increment,
first_name varchar (20),
last_name varchar (20)
);
create table Book (
id int primary key auto_increment,
title varchar (20),
price decimal(10,2)
);
create table AuthorBook (
id int primary key auto_increment,
author_id int,
book_id int,
foreign key(author_id) references Author(id),
foreign key(book_id) references Book(id)
);
insert into Author (first_name, last_name)
values ('Tonya', 'Kupra'),
('Jana', 'Dorina'),
('Dmitro', 'Ishkin');
insert into Book (title, price)
values ('Killstart', 10),
('Tor', 50),
('hello', 40);
insert into AuthorBook(author_id,book_id) values
(1,1),
(1,2),
(2,1);
select author_id, book_id from AuthorBook where author_id = (select id from Author where Author.first_name = 'Tonya')
Ответы (1 шт):
Автор решения: SwaD
→ Ссылка
Вам необходимо сцепить все таблицы по ключам и уже фильтровать, тогда получите верный результат
select a.first_name, a.last_name, b.title, b.price
from Author a
join AuthorBook ab on a.id=author_id
join Book b on b.id = ab.book_id
where a.first_name = 'Tonya'
В вашем исполнении, вы выбирали только поля из таблицы AuthorBook