我一直在谷歌搜索,但似乎无法准确弄清楚我的情况。我想做的是加入一个拥有与其相关的工作列表的客户。我想要客户和任何“活跃”的工作,换句话说,它们还没有被删除。已删除标志是 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 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
关于MySQL 左连接带有子 IsDeleted 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27827147/