MySQL Left Join with child IsDeleted 标志

MySQL Left Join with child IsDeleted Flag

我一直在谷歌搜索,但似乎无法完全弄清楚我的情况。我想做的是加入一个客户,该客户拥有与其相关的工作列表。我想要客户和任何 "active" 个工作,换句话说,它们没有被删除。 deleted 标志是 datedeleted 列是否为 null。

假设我有一个 table 客户:

ID - Name
1  - Joe Blow
2  - John Smith

而且我还有 table 份工作

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

我想要做的是让客户获得他们的工作列表。现在我知道,如果我与 Jow Blow 进行连接,它工作正常,但是当我想要 John Smith 时它不起作用,它没有 return 任何行,因为我正在检查 Deleted 标志,然后没有 return 工作的任何行,而工作又没有 return 任何客户。

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 JOIN.

ON 子句中

改用这个:

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

试试这个 approach.As 根据我的理解你想显示所有那些没有日期的职位。

      select e.Id,e.Name,( case  when j.date is null then j.name else null end) as Jobprocess from 
      customer e
      left join job j on e.Id=j.custId