2017-10-07 3 views
2

私は3つのテーブルを持っています。 1つはノートNotes、1つはユーザUsers、もう1つはユーザとノートの間のリレーテーブルNotesUsersです。 select文からあなたは私が何をしようとしている伝えることができSELECTSがさまざまな条件に基づいている複数のテーブルからSELECTを実行するにはどうすればよいですか?

ユーザー

user_id first_name last_name 
1   John   Smith 
2   Jane   Doe 

ノート

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  

、。 user_id = 2にアクセス権があるが、必ずしも所有しているわけではないメモを選択しようとしていますが、これと一緒に所有者の名字を取得しようとしています。

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 

私の問題はnotesのためにその対first_name、およびlast_nameためWHERE句が異なっているので、私はデータを照会する方法がわからないということです。 JOINJOINの仕組みではなく、 は必ず使用する必要はありませんが、ステートメントをどのように構造化するのかは分かりませんので、私はそこに残しておいて、私のことを理解できるようにしますやろうとしている。

答えて

1

あなたは結果にユーザーの詳細を追加するためのアクセスをチェックしUsersとするNoteUsersNotesに参加することができます。

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

あなたがメインクエリ内のクエリを使用するためにここにする必要があります。 MySQLはuser_id = 2のユーザがNoteUserからアクセスできるすべてのnote_idを最初に返します。次に、first_namelast_nameの所有者を返す外部クエリを作成します。

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) 
関連する問題