MySQL Left加入子IsDeleted Flag

时间:2015-01-07 19:28:46

标签: mysql sql left-join

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

所以让我们说我有一张桌子顾客:

ID - Name
1  - Joe Blow
2  - John Smith

我还有一张乔布斯表

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

我想要做的是让客户获得他们的工作清单。现在我知道如果我和Jow Blow一起加入它可以正常工作,但是当我想要得到John Smith时它不起作用,它没有返回任何行,因为我正在检查Deleted标志然后不会为工作返回任何行,而这些行又不会返回任何客户。

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

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

问题出在你的WHERE条款中。添加AND j.date_deleted IS NULL后,您将OUTER JOIN变为INNER JOIN。您需要将此条件移至ON的{​​{1}}条款。

请改用:

OUTER JOIN

答案 1 :(得分:0)

试试这种方法。根据我的理解,你想展示那些没有约会的工作。

      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