假设我有 2 张 table :
“clients”,包含“client_id”和“name”列
“shops”,包含“id”、“shop_name”和“active”列(枚举 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'
但它不起作用 - 它只是为我提供了活跃商店的客户,而忘记了其他商店。
我正在考虑子查询,但这对我来说是一个新鲜的话题......
有什么想法吗?
最佳答案
您需要将 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 JOIN
转换为 >内连接
。这样做是因为 WHERE
过滤器在 LEFT JOIN
完成之后执行,从而过滤掉 NULL
结果你会收到的。
关于mysql - mySql 中的简单查询 - 可能是子查询和联接(中级),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39132402/