首页 > 解决方案 > MySQL 如果存在左外连接

问题描述

我有一个这样的查询:

 SELECT process.id, name, item, file, sort, userprocess.id 
 FROM `process` 
 left outer join userprocess ON userprocess.processid = process.id 
 WHERE userprocess.userid = 11

我想要做的是添加一个额外的布尔列,如果 userprocess.id 不为 null,则将其设为 true,如果 null 则将 userid 11 设为 false ...最好的方法是什么?

我有两行在进程中,一个在用户进程中,但是这个查询只返回 1 行。我期望它返回 2 行,一个为真,另一个为假。

标签: mysql

解决方案


您需要将您WHERE的条件移动到条件中,因为它正在删除可能存在ON的任何行(因为在这种情况下也会如此,因此测试将失败)。然后,您可以根据是否为 ​​NULL 在输出中添加一个布尔列:userprocess.idNULLuserprocess.useridNULLWHEREuserprocess.id

 SELECT process.id, name, item, file, sort, userprocess.id, 
        userprocess.id IS NOT NULL AS userprocess_exists
 FROM `process` 
 LEFT OUTER JOIN userprocess ON userprocess.processid = process.id
                            AND userprocess.userid = 11

推荐阅读