Я пытаюсь получить результат информации о строках из таблиц с именем book_info и copy_info, а затем (если они существуют) результаты из таблицы с именем издателя (чей внешний ключ находится в copy_info), и (если они существуют) являются результатом жанра имени таблицы через таблицу переходов, называемую books_genres. Ниже, $ safe_copy_id определяется в выражении php, я оставил его для примера.
Это работает:Несколько взаимодействий, работающих независимо, но не вместе
SELECT * FROM book_info, copy_info
LEFT OUTER JOIN publisher ON copy_info.publisher_id = publisher.publisher_id
WHERE book_info.book_id = copy_info.book_id
AND copy_info.copy_id = $safe_copy_id LIMIT 1
и это работает:
SELECT * FROM book_info, copy_info, books_genres
LEFT OUTER JOIN genre ON books_genres.genre_id = genre.genre_id
WHERE book_info.book_id = copy_info.book_id
AND copy_info.copy_id = $safe_copy_id LIMIT 1
Но то, что я действительно хотел бы работать так:
SELECT * FROM book_info, copy_info, books_genres
LEFT OUTER JOIN publisher ON copy_info.publisher_id = publisher.publisher_id
LEFT OUTER JOIN genre ON books_genres.genre_id = genre.genre_id
WHERE book_info.book_id = copy_info.book_id
AND copy_info.copy_id = $safe_copy_id LIMIT 1
ли это, что я должен что-то гнездящихся Вот? Не уверен, как двигаться вперед и ценит любое понимание.
Простое правило: * Никогда * не используйте запятые в предложении 'FROM'. * Всегда * используйте правильный, явный синтаксис JOIN. Вероятно, это поможет решить вашу проблему. –
@GordonLinoff Я удалил запятые из предложения FROM. Я не уверен, что это то, что вы имели в виду, но я удалил «LEFT OUTER» из каждого условия соединения, чтобы просто сказать JOIN. К сожалению, это не сработало. –
Я не уверен, как работает второй запрос. Не существует условия соединения для 'books_genres' с помощью' book_info' или 'copy_info'. Вы ищете декартовой продукт из 'book_genres'? Это поможет, если вы дадите 2 строки для всех таблиц и ваш ожидаемый результат на основе этого. – Utsav