Что не так с моим SQL-запросом с использованием левых соединений?

0

Я использую MySQL. У меня есть 3 таблицы, которые я пытаюсь подключить в запросе, и я не вижу, что я делаю неправильно, со следующим запросом:

Таблица 1: книги (список книжной информации) Таблица 2: книжная полка (список книг, которыми владеет член) Таблица 3: book_reviews (список обзоров книг)

Я хочу создать список всех книг, которые пользователь имеет в своей книжной полке, а также любые сделанные ими обзоры. Следующий запрос дает мне список только книг, просмотренных пользователем; Я хочу все свои книги. Я подумал, что вторая LEFT OUTER JOIN сделает это - соединяя названия книжной полки с названиями книг, но у меня нет книг без обзоров (их должно быть много). Удаление второго оператора JOIN (и установка книжной полки в инструкции FROM) позволяет мне получить список названий без отзывов, но он показывает все обзоры книг всеми пользователями.

SELECT books.title, book_reviews.comments
FROM books
LEFT OUTER JOIN book_reviews ON books.ID = book_reviews.book_id
LEFT OUTER JOIN bookshelf ON book_reviews.user_id = bookshelf.user_id
WHERE bookshelf.book_id = books.ID
AND bookshelf.user_id =1

Я предполагаю, что мне не хватает чего-то очень очевидного, но я читал о присоединениях и перехожу к своей логике, и я слеп. Спасибо всем, кто может помочь мне увидеть...

  • 0
    Могут ли они просмотреть книги, которых нет на их книжной полке?
  • 0
    Да, они могут, но для этой ситуации я ищу только предметы с их книжной полки. Сайт ориентирован на книжную полку.
Теги:
join

1 ответ

1
Лучший ответ

Попробуйте следующее:

SELECT books.title, book_reviews.comments
FROM bookshelf
LEFT OUTER JOIN books ON books.ID = bookshelf.book_id
LEFT OUTER JOIN book_reviews ON book_reviews.book_id = books.ID  
 AND book_reviews.user_id = bookshelf.user_id

WHERE bookshelf.user_id =1
  • 0
    Вот и все. Я полагаю, начав с книг вместо книжной полки, я, должно быть, сосредоточился на неправильной вещи.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню