2017-10-07 15 views
2

J'ai trois tables. Un avec notes Notes, un avec les utilisateurs Users, et une table relationnelle entre les utilisateurs et les notes NotesUsers.Comment JOIN SELECT de plusieurs tables, où SELECTS est basé sur des conditions différentes?

utilisateurs

user_id first_name last_name 
1   John   Smith 
2   Jane   Doe 

Remarques

note_id note_name  owner_id 
1   Math   1 
2   Science  1 
3   English  2 

NoteUsers

user_id note_id 
1   1   
2   1 
2   2   
2   3  

Espérons que de l'instruction select, vous pouvez dire ce que je suis en train de faire. J'essaie de sélectionner les notes auxquelles user_id = 2 a accès mais ne possède pas nécessairement, mais aussi avec cela j'essaie d'obtenir le prénom et le nom du propriétaire.

SELECT Notes.notes_id, note_name 
FROM Notes, NotesUsers 
WHERE NotesUsers.note_id = Notes.note_id AND NotesUsers.user_id = 2 
JOIN SELECT first_name, last_name FROM Users, Notes WHERE Notes.owner_id = Users.user_id 

Mon problème est que parce que la clause WHERE pour first_name et last_name par rapport à celle pour notes sont différents, je ne sais pas comment interroger les données. Je comprends que ce n'est pas comment un JOIN fonctionne et je ne veux pas nécessairement utiliser un JOIN, mais je ne suis pas sûr de savoir comment structurer la déclaration, alors je l'ai laissé là pour que vous puissiez comprendre ce que je suis essayer de faire.

Répondre

1

Vous pouvez rejoindre Notes avec NoteUsers pour vérifier l'accès et Users ajouter les détails de l'utilisateur au résultat:

SELECT n.noted_id, n.note_name, u.first_name, u.last_name 
FROM Notes n 
JOIN NoteUsers nu ON n.noted_id = nu.note_id AND nu.user_id = 2 
JOIN Users u ON n.owner_id = u.user_id 
1

vous avez besoin ici d'utiliser une requête dans la requête principale. MySQL retournera d'abord tous les note_id que l'utilisateur avec user_id = 2 a accès à partir de NoteUser, puis bien construire la requête externe pour retourner le first_name et le last_name du propriétaire.

SELECT u.first_name, u.last_name, n.note_name, n.note_id 
    FROM Notes AS n 
    LEFT JOIN Users AS u ON u.user_id = n.owner_id 
    WHERE n.note_id IN 
     (SELECT nu.note_id FROM NoteUser WHERE nu.user_id = 2)