j'ai une relation de propriété entre deux tables, disent users(int user_id)
et user_books(int user_book_id,int user_id,int book_id)
et deux tables supplémentaires books(int book_id, varchar book_title, int author_id)
et authors (int author_id, varchar author_name)
.Mysql joindre pour trouver des lignes « manquantes » « en rapport »
Étant donné un user_id
spécifique, je veux obtenir les livres que l'utilisateur n'a pas ce que écrit par les auteurs qu'il a d'autres livres écrits par eux. Donc si l'utilisateur a BOOK1 (c'est-à-dire qu'il existe une ligne pour cela dans user_books
) et n'a pas BOOK2 et BOOK3 écrit par le même auteur que BOOK1, je veux obtenir les ids pour BOOK2 et BOOK3.
Je suppose que je peux le faire en utilisant SELECT WHERE NOT IN() mais pour des raisons de performances, je recherche une solution basée sur les jointures.
Avez-vous essayé d'utiliser une jointure externe? –
comme je l'ai dit, je peux écrire cela en utilisant un "select where not in" mais je veux utiliser des jointures. Je suis conscient que cela devrait être fait en utilisant une jointure gauche mais je ne sais pas exactement comment. – epeleg
J'ai aussi un problème avec le fait que certains utilisateurs peuvent déjà avoir plus d'un user_book, donc une jointure retournera l'identifiant de l'auteur plus d'une fois. – epeleg