Je tente d'obtenir un résultat d'informations de ligne provenant de tables nommées book_info et copy_info, puis (si elles existent) d'une table nommée publisher (dont la clé étrangère est dans copy_info), et (s'ils existent) résultent d'un genre de nom de table via une table de jonction appelée books_genres. Ci-dessous, $ safe_copy_id est défini dans une instruction php, je l'ai laissé pour l'exemple.
Cela fonctionne:Plusieurs jointures travaillant indépendamment mais pas ensemble
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
et cela fonctionne:
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
Mais ce que je voudrais vraiment travailler est la suivante:
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
Est-ce que je devrais nicher quelque chose ici? Je ne sais pas comment aller de l'avant et j'apprécierais tout aperçu.
Règle simple: * Jamais * utiliser des virgules dans la clause 'FROM'. * Toujours * utiliser une syntaxe 'JOIN' correcte et explicite. Cela va probablement résoudre votre problème. –
@GordonLinoff J'ai supprimé les virgules de la clause FROM. Je ne suis pas sûr si c'est ce que vous vouliez dire, mais j'ai enlevé "LEFT OUTER" de chaque clause de jointure pour simplement dire JOIN. Cela n'a pas fonctionné malheureusement. –
Je ne suis pas sûr de savoir comment la deuxième requête fonctionne. Il n'y a pas de condition de jointure pour 'books_genres' avec 'book_info' ou' copy_info'. Cherchez-vous un produit cartésien de 'book_genres'? Il serait utile si vous donnez 2 lignes pour toutes les tables et votre résultat attendu basé sur cela. – Utsav