从不同的表中选择

时间:2014-07-04 07:08:21

标签: mysql

我有桌子

user_task(_id,email,task_id)

users(_id int, email varchar(50))

tasks(_id,name)

和表

subtask(_id,name, task_id)

我需要两个选择语句

  1. 通过电子邮件选择某个用户的所有任务
  2. 选择此用户的子任务
  3. 没有sql-joins的经验。所以我需要一些帮助。提前谢谢

    我认为这个陈述将完成第一个陈述的工作,但我不确定

    SELECT * FROM tasks WHERE _id=
    (SELECT task_id FROM user_tasks WHERE email='$email')
    

4 个答案:

答案 0 :(得分:2)

选择特定电子邮件ID的所有任务,您需要加入user_taskstasks

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'

更新在更新问题后,我看到有user表,并且您将emailid存储到user_task,我建议将userid存储在表{ {1}}如果用户更改了电子邮件ID,则不会对相关表产生任何问题,您只需要使用id将user_task表加入user表。

因此,如果您将user_tasks存储在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'

答案 1 :(得分:1)

SELECT "tasks".* FROM "tasks" 
INNER JOIN "user_tasks" ON "user_tasks"."task_id" = "tasks"."id" 
INNER JOIN "subtask" ON "subtask"."task_id" = "tasks"."id"

您可以将INNER JOIN更改为OUTER JOIN并使用联接操作数据集

见这里:http://www.tutorialspoint.com/mysql/mysql-using-joins.htm

答案 2 :(得分:0)

尝试使用INNER JOIN

SELECT *
FROM tasks T
INNER JOIN user_tasks UT ON T._id = UT.task_id
WHERE UT.email='$email'

答案 3 :(得分:0)

SELECT * FROM tasks tsk INNER JOIN user_tasks usr_tsk ON tsk._id = usr_tsk.task_id WHERE usr_tsk.email =' $ email';