我有 table
user_task(_id,email,task_id)
表格
users(_id int, email varchar(50))
表格
tasks(_id,name)
和表
subtask(_id,name, task_id)
我需要两个选择语句
- 通过电子邮件选择特定用户的所有任务
- 选择该用户的子任务
没有 sql-join 方面的经验。所以我需要一些帮助。提前致谢
我认为这条语句将完成第一个语句的工作,但我不确定
SELECT * FROM tasks WHERE _id=
(SELECT task_id FROM user_tasks WHERE email='$email')
最佳答案
选择您需要加入user_tasks
和tasks
的特定电子邮件ID 的所有任务
select
ut._id,
ut.email,
ut.task_id,
t.name
from user_task ut
join tasks t on t._id = ut.task_id
where ut.email = 'some email id'
选择与您需要加入所有表的用户相关的子任务作为
select
ut._id ,
ut.email,
ut.task_id,
t.name as task_name,
st._id as sub_task_id,
st.name as sub_task_name
from subtask st
join tasks t on t._id = st.task_id
join user_task ut on ut.task_id = t._id
where ut.email = 'some email id'
UPDATE 问题更新后,我看到有 user
表并且您正在将 emailid 存储到 user_task
,我建议存储表 user_task
中的 userid,这样如果用户更改电子邮件 id,它不会对相关表造成任何问题,您只需要将 user
表加入到 user_tasks
表使用 id。
因此,如果您将 user_id
存储在 user_task
表中而不是 email
中,查询将看起来像
select
u.id as user_id,
u.email,
ut.task_id,
t.name
from user_task ut
join user u on u._id = ut.user_id
join tasks t on t._id = ut.task_id
where u.email = 'some email id'
和
select
u._id as user_id,
u.email,
ut.task_id,
t.name as task_name,
st._id as sub_task_id,
st.name as sub_task_name
from subtask st
join tasks t on t._id = st.task_id
join user_task ut on ut.task_id = t._id
join user u on u._id = ut.user_id
where u.email = 'some email id'
关于mysql - 从不同的表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24568520/