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
我一直在谷歌搜索,但似乎无法完全弄清楚我的情况。我想做的是加入一个客户,该客户拥有与其相关的工作列表。我想要客户和任何 "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