如何使用mysql连接表编写复杂查询
我有桌子如何使用mysql连接表编写复杂查询,mysql,sql,database,inner-join,Mysql,Sql,Database,Inner Join,我有桌子 任务-id、名称 那我有 userTasks-id,task-id,user-id 及 User-id,name 假设我在任务表中有10个任务,在这些任务中,我在userTask表中有3个任务 我想要这样的查询 从任何选项中选择task.id、task.name、STATUS(if(presentingusertasks)、1,0) 如果该任务id存在于该用户id的usertasks表中,则状态词应为1,否则应为0 这样,我就可以在userTask表中找到哪些任务是已读的您正在查找的E
任务-id、名称
那我有
userTasks-id,task-id,user-id
及
User-id,name
假设我在任务表中有10个任务,在这些任务中,我在userTask
表中有3个任务
我想要这样的查询
从任何选项中选择task.id、task.name、STATUS(if(presentingusertasks)、1,0)
如果该任务id存在于该用户id的usertasks表中,则状态词应为1
,否则应为0
这样,我就可以在userTask表中找到哪些任务是已读的您正在查找的
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
您正在查找
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
试试这个:
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
演示:试试这个:
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
演示:试试这个:
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
试试这个:
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
试一试
试一试
我试过了,但它只返回其中的staus=1,但我希望从tasks表中获得所有结果,但userTasks中的结果应为STATUS=1。对于其他结果,它应为0。我认为你与userTasks上的userid不匹配,而且你没有写入状态字段名称。我试过,但它只返回其中的staus=1,但我希望从tasks表中获得所有结果,但userTasks中的结果应该是STATUS=1,对于其他结果,应该是0I认为您与userTasks上的userid不匹配,并且您没有写入STATUS字段名