mysql理解组由一个连接表组成

问题描述 投票:0回答:1

所以我有“主”表(A)字段:id, order_number, order_name和表(B)字段:id, fk.order_number, tracking_number

表(A)负责跟踪每个订单,而表(B)存储每个订单的所有相关跟踪信息。

我想要完成的是查询表A中的每个订单并连接表B以显示为每个订单存储的第一个跟踪号,几乎像限制1(仅返回每个订单的第一个存储的跟踪号)。

我当前这样做是在order_number字段的表A和表B之间的连接,但我在语句的末尾使用GROUP BY tableA.order_number

select tablea.order_number, tablea.order_name, tableb.tracking_number
from tablea
join table b
on tablea.order_number = tableb.order_number
group by tablea.order_number

我想这个问题围绕着,当你从连接表返回多行时,通过排序的默认组是什么?例如,在表A中,只有1行,而在故事B中有2行(订单的2个跟踪号)。那么,当我在这种情况下分组时,是否总是从连接表中的第一个匹配条件匹配组?如果我删除了group by,则会返回2行。

我意识到发生了什么,因为我在tableA上有条件组,因此它只显示第一行,因为从连接返回的两行具有相同的订单号,这似乎是我想要的(每个订单限制1个跟踪号) ),但我不确定我是否以编程方式正确地执行了此操作,或者是否以这种方式发生,因为这是group by子句的工作原理以及我如何在此处使用它。我只想根据表A的order_number从tableB中限制1个跟踪号。

更新(带示例查询)

SELECT m.message_id, m.message_date, m.message_order_number, m.message_purchase_order, m.message_vendor_invoice, ve.vendor_email_display, concat(c.customer_first_name, ' ', c.customer_last_name) as customer_name,
min(ti.tracking_information_id) as tracking_information_id, ti.tracking_information_tracking_number, ti.tracking_information_tracking_number_status
FROM email.message m
JOIN email.customer c
ON m.message_tagged_customer_first = c.customer_id and m.message_tagged_customer_last = c.customer_id
JOIN vendor_email ve
ON m.message_sender = ve.vendor_email_id
LEFT JOIN tracking_information ti
ON m.message_order_number = ti.tracking_information_order_number
group by m.message_order_number

在这种情况下,我想返回消息表中的所有信息,以及表跟踪中的第一个匹配行

mysql
1个回答
0
投票

将聚合函数分组为by(),MAX(),COUNT()。 ..并且用于定义尊重哪个列必须执行聚合功能..

如果您要查找特定的有序结果,则应使用对列值有效的ORDER BY

select tablea.order_number, tablea.order_name, tableb.tracking_number
from tablea
join table b on tablea.order_number = tableb.order_number
order  by tablea.order_number
© www.soinside.com 2019 - 2024. All rights reserved.