MySQL 左连接带有子 IsDeleted 标志

标签 mysql sql left-join

我一直在谷歌搜索,但似乎无法准确弄清楚我的情况。我想做的是加入一个拥有与其相关的工作列表的客户。我想要客户和任何“活跃”的工作,换句话说,它们还没有被删除。已删除标志是 datedeleted 列是否为空。

所以假设我有一张 table 客户:

ID - Name
1  - Joe Blow
2  - John Smith

我还有一个工作表

ID  -  CustomerId  -  Name         -  DateDeleted
1   -      1          Build Fence         NULL
2   -      2        - Clean Yard   -   25/12/2014

我想做的是让客户列出他们的工作 list 。现在我知道,如果我与 Jow Blow 进行连接,它可以正常工作,但是当我想要获取 John Smith 时,它不起作用,它不会返回任何行,因为我正在检查已删除标志,然后该标志不会返回作业的任何行都不会返回任何客户。

SELECT c.id, c.name, j.name as JobName from customer c
left join job j on c.id = j.CustomerId
where c.id = :id AND j.date_deleted IS NULL

我想要的结果是:

Id  -  Name        -  JobName
1   -  Jow Blow    -  Build Fence

Id  -  Name        -  JobName
2   -  John Smith  -  NULL

任何帮助将不胜感激。谢谢!

最佳答案

问题出在您的 WHERE 子句中。添加 AND j.date_deleted IS NULL 时,您会将 OUTER JOIN 转换为 INNER JOIN。您需要将此条件移至 OUTER JOINON 子句。

改用这个:

Select      c.id, 
            c.name, 
            j.name      As JobName 
From        customer    c
Left Join   job         j   On  c.id = j.CustomerId
                            And j.date_deleted IS NULL
Where       c.id = :id

关于MySQL 左连接带有子 IsDeleted 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27827147/

相关文章:

SQL 连接一系列值(整数范围、日期范围等)

mysql - 当您将两个具有相同属性名称的表相乘时会发生什么?

SQL/Doctrine : Left Join problem

MySQL:有没有办法有条件地 LEFT JOIN? (或类似的?)

php - 是否有根据列类型执行 MySQL 数据验证和清理的 PHP 库?

mysql - 1064 - 你的 SQL 语法有错误 - Joomla 网站

php - 不使用 PHP 和 Ajax 使用 session 登录另一个页面

sql - MySQL 服务器已消失错误

php - 在 PHP 中从 MySQL 表数据创建 CSV 文件

mysql - 是否有任何关于此 PyMysql/Mysql 行为的文档?