2012-08-10 88 views
1

我有表如何编写复杂的查询与MySQL与表连接

Tasks- id,name

然后我有

userTasks id , task_id , user_id

User - id , name

假设我有在任务表和出那些10个任务我有3个任务userTask

我想这样的查询

Select task.id , task.name , STATUS (if(presentInUserTasks),1,0) FROM whatever

STATUS字应该1如果该任务ID存在于usertasks表,以用户ID,否则它应该是0

使我能够找到其中的那些事情alreadu在userTask表

回答

4

你正在寻找的EXISTS关键字:

SELECT tasks.id, tasks.name, 
    IF(EXISTS(SELECT id 
       FROM userTasks 
       WHERE userTasks.task_id = tasks.id 
       AND userTasks.user_id = @that_user_id) 
     ,1,0) AS STATUS 
FROM tasks 
+0

这一个工作正常 – user17 2012-08-10 06:03:48

1

试试这个:

SELECT b.id, 
     b.name, 
     IF(coalesce(c.Task_ID, -1) = -1, 0, 1) `Status` 
FROM `User` a 
      CROSS JOIN `Task` b 
      LEFT JOIN UserTask c 
       ON a.ID = c.user_ID AND 
        b.ID = c.Task_ID 
Where a.id = 1 

演示:http://sqlfiddle.com/#!2/a22d0/7

0

试试这个:

select T.id , T.name , 
     case when u.task_id is not null then 1 else 0 end as STATUS 
from 
Tasks T left outer join usertasks U 
on T.id=u.task_id 
0

TRY

SELECT t.id,t.name, 
CASE WHEN ut.task_id IS NULL THEN '0' ELSE '1' END 
FROM Tasks t 
LEFT JOIN UserTask ut ON ut.task_id = t.id 
+0

我试过了,但它只返回staus = 1的地方,但我想要任务表中的所有结果,但userTasks中的结果应该有STATUS = 1对于其他应该是0 – user17 2012-08-10 05:51:51

+0

已更新。现在试试 – diEcho 2012-08-10 05:52:30

+0

我认为你没有在usertasks上匹配userid,也没有写出STATUS字段名 – user17 2012-08-10 06:00:14