@TRIG

Можно ли делать запрос к промежуточной таблице многие-ко-многим для извлечения конкретной информации?

Есть простая структура БД:
CREATE TABLE books
( 
    book_id integer NOT NULL,
    book_name varchar(32) NOT NULL,
)
CREATE TABLE autors
( 
    autor_id integer NOT NULL,
    autor_name varchar(32) NOT NULL,
)
CREATE TABLE book_autor
( 
    book_id integer NOT NULL,
    autor_id integer  NOT NULL,
    PRIMARY KEY (book_id , autor_id),
    FOREIGN KEY (book_id) REFERENCES books,
    FOREIGN KEY (autor_id ) REFERENCES autors,
);


1. У нас есть много книг и много авторов.
2. У конкретного автора может быть много книг.
3. У конкретной книги может быть много авторов (со-авторов).

ВОПРОС:
Можем ли мы сделать запрос к БД и извлечь из промежуточной таблицы (book_author) информацию по конкретной книге?

Т.е. у нас для работы есть только информация о книге и теперь нужно извлечь информацию о её авторе (авторах).

И какие еще есть способы извлечения такой информации из БД?

Приемлемо ли вообще делать такие запросы к промежуточным таблицам?
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега MySQL
{PHP, MySql, HTML, JS, CSS} developer
Можем ли мы сделать запрос к БД и извлечь из промежуточной таблицы (book_author) информацию по конкретной книге?
Из "промежуточной" можно извлечь только связи, она для этого и нужна.

Т.е. у нас для работы есть только информация о книге и теперь нужно извлечь информацию о её авторе (авторах).
В чем вопрос? Как сделать джоин с 3 таблицами? Так же как с двумя, только с тремя.

Приемлемо ли вообще делать такие запросы к промежуточным таблицам?
Какие - "такие"? У вас вообще ни одного запроса не написано.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
Что-то много философии про можно/нельзя. Нужно влоб погуглить "join-ы в sql" и набросать что-то такое:
select b.*, -- все колонки по книге
        a.* -- все колонки по сведениям об авторе
from books as b
join book_autor as ba on b.book_id = ba.book_id  -- если у книги может не быть авторов, то нужен left join
join autors as a on ba.autor_id = a.autor_id -- если у книги может не быть авторов, то нужен left join
where b.book_id = :book_id -- сюда подставляем параметр нужной книги.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы