2012-09-24 52 views
2

我正在嘗試編寫一條SQL語句來檢索數據庫中的用戶列表,以及他們的公司名稱(如果他們有與其關聯的公司)。但是,有幾個陷阱:基於條件的混合左/右連接?

  1. 並非所有用戶都有公司,但我仍然需要在列表中顯示這些人。
  2. 即使用戶有公司,該公司可能會被軟刪除(該記錄仍在數據庫中,但被標記爲is_deleted = 1),並且我不想顯示與「刪除「公司。

所以基本上我想從用戶表中選擇並且左連接公司表,但如果公司將它們分配給is_deleted,我不想包括用戶記錄。

我的第一個傾向是,我將不得不使用聯合將兩個查詢合併在一起,但我希望有一個更乾淨的方式來做到這一點?

使用MySQL 5.1

回答

2
SELECT U.name Username, C.name Company 
FROM User U 
LEFT OUTER JOIN Company C 
ON U.companyid = C.id 
WHERE C.id IS NULL OR C.is_deleted = 0 

C.id IS NULL獲取用戶沒有公司,並C.is_deleted = 0獲得未被軟刪除的公司的用戶。

1

試着加入到排除刪除公司的表:

SELECT U.Name, C.Name 
FROM User U LEFT OUTER JOIN 
    (SELECT CompanyId, CompanyName 
    FROM Company 
    WHERE is_deleted = 0) 
C ON U.CompanyId = C.CompanyId 
+0

但我還想包括根本沒有公司分配給他們的用戶。看起來這種方式只顯示有公司的用戶,這可以通過傳統的INNER JOIN完成。 – Slickrick12

+0

然後,您可以將INNER JOIN更改爲LEFT OUTER JOIN。我已經更新了我的答案。 – Maciej