关于 sql left join on 多条件

最近开发中遇到 left join on 后跟多条件的问题,

left join on常用例子 :
select * from user left join order as o on o.userId = o.id
 会查询出主表的所有数据

on 后 多条件 主表条件例子 ,该条sql执行后发现,还是会查询主表的所有数据(相当于没起作用)

select * from user as u left join order as o on o.userId = o.id and u.id = 1

 on 后多条件 关联表条件,发现主表的数据也会被查询,而关联表的数据会根据and后面的条件查询。

select * from user as u left join order as o on o.userId = o.id and o.id = 1

### SQL `LEFT JOIN` 多表连接示例 当处理多表关联时,`LEFT JOIN` 是一种非常有用的工具。它允许保留左侧表格中的所有记录,并仅在右侧表格中有匹配项时添加相应的字段。 #### 示例场景 假设存在三个表:`orders`, `customers`, 和 `products`。目标是从这三个表中获取订单详情,即使某些客户尚未下单或某些产品未被订购过。 #### 表结构描述 - **Orders (订单)**: 包含订单ID (`order_id`)、顾客ID (`customer_id`) 及其他信息。 - **Customers (顾客)**: 包含顾客ID (`customer_id`) 和姓名 (`name`) 等个人信息。 - **Products (商品)**: 包含商品ID (`product_id`) 和名称 (`product_name`)。 #### 查询需求 希望得到一份报告,显示每位客户的最新一次购买的商品名及其对应的订单日期。如果某位客户从未下过单,则该条目应为空白;对于那些没有售出的产品也应当列出它们的名字。 #### 实现方案 为了实现上述目的,可以构建如下所示的SQL查询: ```sql SELECT c.customer_id, c.name AS customer_name, p.product_name, o.order_date FROM customers c LEFT JOIN ( SELECT order_id, customer_id, product_id, MAX(order_date) as order_date FROM orders GROUP BY customer_id, product_id ) o ON c.customer_id = o.customer_id LEFT JOIN products p ON o.product_id = p.product_id; ``` 此查询首先创建了一个临时视图(子查询),从中选取每一对特定于某个用户的最近一笔交易的信息。接着利用两次 `LEFT JOIN` 将这些数据分别与 `customers` 和 `products` 进行关联[^1]。 通过这种方式,即便是在缺少对应关系的情况下也能完整展示所有的顾客和他们可能拥有的订单情况[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值