如何从多个表中加入SELECT,其中SELECTS基于不同的条件?

时间:2017-10-07 13:44:10

标签: mysql sql select join

我有三张桌子。一个包含备注Notes,一个包含用户Users,另一个包含用户和备注NotesUsers之间的关系表。

用户

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      

希望从select语句中你可以告诉我我想要做什么。我正在尝试选择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

我的问题是因为WHEREfirst_name的{​​{1}}条款与last_name的条款不同,我不知道如何查询数据。我知道这不是notes的工作方式 我不一定想使用JOIN,但我不确定如何构造语句,所以我把它留在那里,以便你能理解我想要做的事情。

2 个答案:

答案 0 :(得分:0)

您可以NoteUsers加入Users以检查访问权限,并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 将用户的详细信息添加到结果中:

docx_summary

答案 1 :(得分:0)

您需要在主查询中使用查询。 MySQL将首先返回note_id用户user_id = 2可以访问NoteUser的所有first_name,然后构建外部查询以返回last_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) 所有者。

Gamma = mod(tril(bsxfun(@minus, (1:500).', 1:500)), 255);
%this 1:500 is for the inner loop---^        ^---This 1:500 is for the outer loop