1

私はテーブルを持っています

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

1そのタスクIDがそのユーザーIDのusertasksテーブルに存在する場合、STATUSワードは、そうでない場合は、0

これで、userTaskテーブルでこれらのタスクのどれがすでに実行されているかを見つけることができます

4

4 に答える 4

3

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
于 2012-08-10T05:38:41.800 に答える
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

于 2012-08-10T05:40:25.633 に答える
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
于 2012-08-10T05:41:00.160 に答える
0

試す

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
于 2012-08-10T05:42:18.353 に答える