Mysql 如何在同一个表上进行双连接

Mysql 如何在同一个表上进行双连接,mysql,Mysql,如何在同一个表上进行双连接 基本上,我想这样做: 1-按订单\日期\上次\修订列降序排列所有记录。 2-按顺序\基础\ id列对这些记录进行分组,以消除重复项。 3-匹配这些记录的id并返回它们的所有列。 这是我的SQL,它不工作: 挑选 * 来自系统主控q1 左连接q1上的系统主q2。订单id=q2。订单id按q2分组。订单基本id 左键连接第二季度的系统报价单主控q3。订单id=q3。订单id,其中订单基本id=010313-6063。第三季度订单日期上次修订描述 基本上,当我尝试执行它

如何在同一个表上进行双连接

基本上,我想这样做:

1-按订单\日期\上次\修订列降序排列所有记录。 2-按顺序\基础\ id列对这些记录进行分组,以消除重复项。 3-匹配这些记录的id并返回它们的所有列。

这是我的SQL,它不工作:

挑选 * 来自系统主控q1 左连接q1上的系统主q2。订单id=q2。订单id按q2分组。订单基本id 左键连接第二季度的系统报价单主控q3。订单id=q3。订单id,其中订单基本id=010313-6063。第三季度订单日期上次修订描述

基本上,当我尝试执行它时,我会得到:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT JOIN sys_quote_master q2 ON q1.order_id = q2.order_id order by q3.order_dat' at line 4
您的分组依据不在if-place中:它必须出现在表之后以及where子句(如果有)之后:

SELECT *
FROM sys_quote_master q1 
LEFT JOIN sys_quote_master q2 ON q1.order_id = q2.order_id 
LEFT JOIN sys_quote_master q3 ON q2.order_id = q3.order_id
WHERE order_base_id="010313-6063"
group by q2.order_base_id 
order by q3.order_date_last_revised desc;
然而,请注意,目前的分组将没有用处;必须列出所有非聚合列才能按预期运行

也许不是你想要的——考虑使用不同的模仿重复:

select distinct *
from ...
-- and remove group by clause
这个怎么样

从中选择* 作为g1的主系统 加入选择订单id、订单基本id、最大订单日期最后修订为最新版本 来自系统主控,其中订单基本id=010313-6063按订单基本id分组为g2 g2.mostrecent=g1.order\u date\u last\u修订 按g1.ORDER\U id排序;

嗨-哇……你真是太棒了……非常感谢你这么快的回复……我运行了你的查询,现在可以了,但我没有得到正确的结果。基本上,我有这3条记录,订单号是21868、21869和21871。它们都具有相同的order_base_id值“010313-6063”。但他们有3个不同的日期时间戳用于订单、日期、最后修订列。我如何按日期降序排序,然后仅根据重复顺序\基本\ id列消除重复的,然后返回所有列,基本上,我认为应该只返回21871。但我得到21868。另外,使用distinct*,返回所有3个,因为它们都有不同的订单id和不同的日期。我只想通过在order_base_id列中只删除重复列值为“010313-6063”的列来区分它们,所以我只想通过此列区分它们。我想我需要找到一种方法,先按顺序排序,然后按分组,然后选择所有列…:这怎么样?从系统主控系统中选择*作为g1连接从系统主控系统中选择订单id、订单基本id、最大订单日期最后修订为最新修订,其中订单基本id=010313-6063按订单基本id分组作为g2上的g2。最新修订为g1。订单日期最后修订为g1。订单基本id;几乎将内部查询的group by更改为group by order\u id、order\u base\u id