2016-08-24 75 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结果。