J'ai deux tables que je voudrais joindre mais je reçois une erreur de MySQLrequête: produit croisé au lieu de rejoindre
Table: books
bookTagNum ShelfTagNum
book1 1
book2 2
book3 2
Table: shelf
shelfNum shelfTagNum
1 shelf1
2 shelf2
Je veux que mes résultats soient:
bookTagNum ShelfTagNum shelfNum
book1 shelf1 1
book2 shelf2 2
book3 shelf2 2
mais à la place, je suis également obtenir un résultat supplémentaire:
book1 shelf2 2
Je pense que ma requête est en train de faire un produit croisé au lieu d'une jointure:
SELECT `books`.`bookTagNum` , `books`.`shelfNum` , `shelf`.`shelfTagNum` , `books`.`title`
FROM books, shelf
where `books`.`shelfNum`=`books`.`shelfNum`
ORDER BY `shelf`.`shelfTagNum` ASC
LIMIT 0 , 30
Qu'est-ce que je fais mal?
Note: J'ai essayé de répondre du mieux que je peux, mais votre question est un peu déroutante, puisque votre exemple n'affiche pas de colonnes books.shelfNum ou books.title, même si vous les référencez dans votre requête. Et votre sortie a 3 colonnes même si vous avez demandé 4. –
Les jointures IMplicit sont une pratique de programmation très pauvre. Ils sont sujets à des jointures accidentelles et beaucoup plus difficiles à maintenir (par exemple, était-ce une jointure délibérée ou un bug?) Ils sont dépassés depuis 1992 et il n'y a aucune excuse pour en utiliser un quand un meilleur, plus desciptif, L'option moins ouverte aux bogues est disponible. – HLGEM