2015-01-07 39 views
0

我一直在谷歌搜索,但似乎無法準確找出我的情況。我想要做的是加入一個擁有與他相關的工作清單的客戶。我希望客戶和任何「積極」工作,換句話說,他們還沒有被刪除。已刪除的標誌是否datedeleted列是否爲空。MySQL左加入的孩子IsDeleted標記

所以可以說我有一個表的客戶:

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 

任何幫助將不勝感激。謝謝!

+1

http://wiki.lessthandot.com/index.php/WHERE_conditions_on_a_LEFT_JOIN – HLGEM

回答

1

問題在於你的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 
0

只是要顯示所有那些沒有日期的作業本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