#mysql #sql
#mysql #sql
Вопрос:
У меня есть объект book, у которого несколько авторов. Я хочу запросить все книги, написанные конкретным автором, но результат запроса также должен возвращать всех авторов для этих книг.
class Book {
String title;
List<Author> authors;
}
Я либо могу получить всю книгу, написанную конкретным автором, и не могу получить других авторов книги со следующим запросом
SELECT b.*, a.*
FROM book AS b
INNER JOIN book_author AS ba ON ba.book_id = b.book_id
INNER JOIN author AS a ON a.author_id = ba.author_id
WHERE a.author_id = 1;
Или получить все книги и отфильтровать книги, написанные этим конкретным автором, в серверной части.
Каков наилучший способ получить желаемый набор строк?
Ответ №1:
Попробуйте настроить ваше условие WHERE.
В настоящее время вы используете одного автора для фильтрации результатов. Что вы действительно хотите, так это отфильтровать по всем книгам, у которых есть этот автор, что-то вроде этого;
SELECT b.*, a.*
FROM book AS b
INNER JOIN book_author AS ba ON ba.book_id = b.book_id
INNER JOIN author AS a ON a.author_id = ba.author_id
WHERE ba.book_id IN (SELECT bai.book_id FROM book_author bai WHERE bai.author_id = 1);