2014-07-04 78 views
0

我有表不同表選擇

user_task(_id,email,task_id) 

users(_id int, email varchar(50)) 

tasks(_id,name) 

而且表

subtask(_id,name, task_id) 

我需要兩個SELECT語句

  1. 通過電子郵件,請選中某個用戶的所有任務
  2. 該用戶的選擇子任務

不要有經驗的SQL連接。所以我需要一些幫助。在此先感謝

我認爲這種說法會做第一次聲明中的工作,但林不知道

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

回答

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' 

UPDATE問題被更新後,我看到有user表,你是存儲EMAILID到user_task,我建議將用戶標識存儲在表user_task中,這樣如果用戶更改電子郵件標識,它不會爲相關表創建任何問題,並且您只需使用標識將user表加入user_tasks表。

所以,如果你已經存儲了user_iduser_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' 
+0

非常感謝你! –

0

與內部的try JOIN

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

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