MySQL-在一个查询中加入

MySQL-在一个查询中加入,mysql,sql,Mysql,Sql,我有两张桌子: 引导 |lead_id|名称| |1 | a| |2 | b| |3 | c| 超前相位 |阶段id |阶段领导|阶段fk |阶段排序|阶段状态| | 1| 1| 1| 1| | 2| 1| 2| 0| | 3| 2| 3| 1| | 4|

我有两张桌子:

引导 |lead_id|名称| |1 | a| |2 | b| |3 | c| 超前相位 |阶段id |阶段领导|阶段fk |阶段排序|阶段状态| | 1| 1| 1| 1| | 2| 1| 2| 0| | 3| 2| 3| 1| | 4| 2| 1| 0| | 5| 2| 2| 0| | 6| 3| 1| 0| | 7| 3| 2| 1|

我必须编写一个查询,显示按lead\u id和列phase\u sort的最大值分组的联接表

我希望得到的结果是: |lead_id|name|phase_id|phase_sort|phase_status| | 1| a| 2| 2| 0| | 2| b| 3| 3| 1| | 3| c| 7| 7| 1| |lead|u id | name | phase|u id | phase|u sort | phase|u状态| |1 | a | 2 | 2 | 0| |2 | b | 3 | 3 | 1| |3 | c | 7 | 7 | 1|

我的问题是: 选择阶段id、阶段领导、阶段排序、阶段状态 从线索 左连接lead_id上的lead_阶段=阶段lead_fk 按领导id分组

您需要分两步执行此操作

select  phase_lead_fk, max(phase_sort)
from    lead_phases
group by phase_lead_fk
这将返回每个lead的hights排序值;然后,您可以通过将该结果与两个原始表合并,将其用作过滤器

select  *
from    leads t1
join    lead_phases t2
on      t1.lead_id = t2.phase_lead_fk
join    (
            select  phase_lead_fk, max(phase_sort) max_phase_sort
            from    lead_phases
            group by phase_lead_fk
        ) t3
on      t2.phase_lead_fk = t3.phase_lead_fk and
        t2.phase_sort = t3.max_phase_sort

GROUPBY无效,甚至不会在较新的MySQL版本上执行(除非在兼容模式下),选择列表中的每个列引用必须标识分组列或是集合函数的参数。您需要一个子查询,该子查询使用GROUP BY返回具有最高阶段排序的每个lead_id。加入这个结果。 SELECT phase_id,phase_lead_fk,phase_sort,phase_status FROM leads LEFT JOIN lead_phases ON lead_id=phase_lead_fk GROUP BY lead_id
select  phase_lead_fk, max(phase_sort)
from    lead_phases
group by phase_lead_fk
select  *
from    leads t1
join    lead_phases t2
on      t1.lead_id = t2.phase_lead_fk
join    (
            select  phase_lead_fk, max(phase_sort) max_phase_sort
            from    lead_phases
            group by phase_lead_fk
        ) t3
on      t2.phase_lead_fk = t3.phase_lead_fk and
        t2.phase_sort = t3.max_phase_sort