假设我有两张桌子:
'客户'列的'client_id'和'name'
'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'
但它不起作用 - 它只给我的客户提供活跃的商店,忘记了其他商店。
我正在考虑子查询,但对我来说这是一个新鲜话题......
有什么想法吗?
答案 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
结果。