2016-08-24 74 views
2

可以說我有2個表:簡單的查詢 - 可能是子查詢和連接(中間)

  • '客戶' 的列 '的client_id' 和 '名'

  • '商店' 與列「ID」,「shop_name」和「主動」(枚舉Y/N)

我想創建一個查詢,這將給我所有的客戶的名字,+第一他們shop_name的被設置爲活躍('y')。如果沒有 - 只是將它作爲空值,但我需要擁有所有客戶端名稱。

所以基本上我想選擇所有的客戶端,並檢查他們是否有一個活躍的商店,如果是的話 - 先分配給適當的客戶端。

這裏是我的查詢:

SELECT c.name 
    , s.shop_name 
    FROM clients AS c 
    LEFT 
    JOIN shops AS s 
    ON s.id = c.client_id 
WHERE s.active='y' 

但它不工作 - 它只是給我的客戶提供積極的商店,忘記了其他的人。

我想子查詢,但它是一個新鮮的話題,我...

任何想法?

+0

你是什麼意思的「他們的shop_name第一」?客戶只能有一家活躍的商店嗎? –

回答

3

您需要將WHERE條款移動到您的ON條件:

Select  C.Name, 
      S.shop_name 
From  Clients As C 
Left Join Shops As S On S.id = C.client_id 
         And S.active = 'y' 

通過包括WHERE子句中LEFT JOIN的右側表,你正在改變OUTER JOININNER JOIN。它是這樣做的,因爲在LEFT JOIN已完成之後WHERE篩選器被執行,因此篩選出您將收到的NULL結果。