如何从多个表中加入 SELECT,其中 SELECTS 基于不同的条件?
Posted
技术标签:
【中文标题】如何从多个表中加入 SELECT,其中 SELECTS 基于不同的条件?【英文标题】:How to JOIN SELECT from multiple tables, where the SELECTS is based on different conditions? 【发布时间】:2018-03-19 03:41:00 【问题描述】:我有三张桌子。一张是笔记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
笔记用户
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
我的问题是因为first_name
和last_name
的WHERE
子句与notes
的子句不同,我不知道如何查询数据。我知道这不是JOIN
的工作方式,并且
我不一定想使用JOIN
,但我不确定如何构建语句,所以我把它留在了那里,以便您了解我想要做什么。
【问题讨论】:
【参考方案1】:您可以加入 Notes
和 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
【讨论】:
【参考方案2】:您需要在此处使用主查询中的查询。 mysql 将首先返回拥有user_id = 2
的用户可以从NoteUser
访问的所有note_id
,然后构建外部查询以返回所有者的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)
【讨论】:
以上是关于如何从多个表中加入 SELECT,其中 SELECTS 基于不同的条件?的主要内容,如果未能解决你的问题,请参考以下文章