sql一对多查询取其中一条
时间: 2023-08-19 16:13:52 浏览: 107
在SQL中,要在一对多关系中查询其中一条数据,可以使用子查询或者关联查询。
假设有两个表,一个是订单表(orders),一个是订单商品表(order_items),其中一个订单可以包含多个商品。现在要查询每个订单的第一条商品信息,可以使用以下两种方法:
1. 子查询方法:
```
SELECT o.order_id,
(SELECT oi.item_name
FROM order_items oi
WHERE oi.order_id = o.order_id
LIMIT 1) AS first_item_name
FROM orders o;
```
上述查询中,子查询 `SELECT oi.item_name FROM order_items oi WHERE oi.order_id = o.order_id LIMIT 1` 会返回每个订单的第一条商品信息,然后将其作为列 `first_item_name` 显示在结果中。
2. 关联查询方法:
```
SELECT o.order_id, oi.item_name
FROM orders o
JOIN (SELECT order_id, item_name, ROW_NUMBER() OVER (PARTITION BY order_id ORDER BY item_id) AS rn
FROM order_items) oi ON o.order_id = oi.order_id
WHERE oi.rn = 1;
```
上述查询中,使用了子查询和窗口函数 `ROW_NUMBER()`,先将订单商品按照订单号和商品ID排序,并为每个订单的商品编号,然后在主查询中只选择第一个商品(即 `oi.rn = 1`)。这样就可以查询每个订单的第一条商品信息了。
阅读全文