mysql一对多,主查不相同的数据
时间: 2024-02-19 08:57:34
浏览: 128
如果你想在一对多的情况下查询主表中不相同的数据,可以使用 `LEFT JOIN` 将主表和从表连接起来,并使用 `GROUP BY` 对主表中的列进行分组。示例代码如下:
假设我们有两张表,`orders` 和 `order_details`,`orders` 表中存储[订单](https://geek.csdn.net/educolumn/063bb84cea4bbe2446d0dbc052631dd6?spm=1055.2569.3001.10083)信息,`order_details` 表中存储[订单](https://geek.csdn.net/educolumn/063bb84cea4bbe2446d0dbc052631dd6?spm=1055.2569.3001.10083)详情信息,一个[订单](https://geek.csdn.net/educolumn/063bb84cea4bbe2446d0dbc052631dd6?spm=1055.2569.3001.10083)可以对应多个[订单](https://geek.csdn.net/educolumn/063bb84cea4bbe2446d0dbc052631dd6?spm=1055.2569.3001.10083)详情。
```sql
SELECT orders.order_id, orders.order_date, MAX(order_details.price) AS max_price
FROM orders
LEFT JOIN order_details
ON orders.order_id = order_details.order_id
GROUP BY orders.order_id, orders.order_date
HAVING COUNT(DISTINCT order_details.price) > 1;
上面的代码中,我们使用 `LEFT JOIN` 将 `orders` 表和 `order_details` 表连接起来,并在 `ON` 后面加上了一个条件,即 `order_id` 相同。然后,我们使用 `GROUP BY` 对 `orders` 表中的 `order_id` 和 `order_date` 列进行分组,使用 `MAX` [函数](https://geek.csdn.net/educolumn/ba94496e6cfa8630df5d047358ad9719?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6NDQ0MDg2MiwiZXhwIjoxNzA3MzcxOTM4LCJpYXQiOjE3MDY3NjcxMzgsInVzZXJuYW1lIjoid2VpeGluXzY4NjQ1NjQ1In0.RrTYEnMNYPC7AQdoij4SBb0kKEgHoyvF-bZOG2eGQvc&spm=1055.2569.3001.10083)获取订单详情表中价格的最大值。最后,我们使用 `HAVING` 对价格的不同值进行计数,并判断是否大于 1,以筛选出价格不相同的订单。
你可以根据自己的实际