Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用mysql连接表编写复杂查询_Mysql_Sql_Database_Inner Join - Fatal编程技术网

如何使用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字段名