mysql - mySql 中的简单查询 - 可能是子查询和联接(中级)

标签 mysql sql

假设我有 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/

相关文章:

mysql - MySql Server Inner join 查询中的无效对象名称错误

java - 如何将mysql与java连接用于html表单?

mysql - 3 按日期在同一个表组中计数和求和

java - Oracle解析 "' {S}Paris 2"as a string literal then finds {S} which it is treating as a SQL Escape Sequence which it doesn'的文本并识别

php - 只计算彼此间隔 30 分钟的行数?

c# - 无法在 C# 中将正确的值发送到数据库

php - 如何根据数据库结果将多个 PHP 复选框设置为选中状态?

sql - 根据最高值更改列

SQL 如何查找一年中每天 2 个不同组的平均出行次数

php - mysql,自上次登录列表以来的时间