mySql中的简单查询 - 可能是子查询和连接(中间)

时间:2016-08-24 20:20:58

标签: mysql sql

假设我有两张桌子:

  • '客户'列的'client_id'和'name'

  • 列的'id','shop_name'和'active'(enum y / n)
  • 'shop'

我想创建一个查询,它将为我提供所有客户端的名称,+第一个shop_name设置为活动('y')。如果有非 - 只需将其作为null,但我需要拥有所有客户名称。

所以基本上我想选择所有的客户并检查他们是否有活跃的商店,如果有的话 - 先将他们分配给合适的客户。

这是我的问题:

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'

但它不起作用 - 它只给我的客户提供活跃的商店,忘记了其他商店。

我正在考虑子查询,但对我来说这是一个新鲜话题......

有什么想法吗?

1 个答案:

答案 0 :(得分: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'

通过在LEFT JOIN子句中加入WHERE的右侧表格,您正在将OUTER JOIN转换为INNER JOIN。这样做是因为WHERE过滤器在 LEFT JOIN完成后执行,从而过滤掉了您将收到的NULL结果。