如何在左连接中订购?

时间:2013-09-16 17:11:57

标签: mysql

很多情况下人们需要在左连接中订购,我目前正试图从一组用户中找到最新的工作列表,不幸的是,我无法让它运行,我现在拥有的是:

select * from `Profiles`
left join (select  isPrimary, startDate, Orgs.`orgName`, Orgs.`title` from        
Orgs order by isPrimary ) job  on 
`Profiles`.`ID` = Orgs.`ID` 
group by `Profiles`.`ID`
 limit 0,2

我觉得我很可能在这附近,但任何人都可以提供一些见解吗?

3 个答案:

答案 0 :(得分:2)

为什么在这里使用subselect?为什么不呢:

SELECT p.*, o.isPrimary, o.startDate, o.orgname, o.title FROM `Profiles` AS p
LEFT JOIN `Orgs` AS o
  ON p.ID = o.ID    
GROUP BY p.ID
ORDER BY p.ID, o.isPrimary
LIMIT 0,2

答案 1 :(得分:1)

由于mysql没有排名功能,你必须使用旧的传统方式。在此,您将创建一个派生表,该表聚合您想要的数据,然后连接到整个表以获取其他字段。

SELECT p.[define fields here, never use select * in production code], o3.isPrimary, o3.startDate, o3.orgname, o3.title 
FROM `Profiles` AS p
LEFT JOIN 
    (SELECT O.Id, o.isPrimary, o.startDate, o.orgname, o.title 
    FROM  `Orgs` as o
    JOIN (SELECT ID, MAX(Startdate) as Startdate FROM   `Orgs` GROUP BY ID) AS o2
      ON o.ID = o2.id and o.startdate = o2.startdate) as 03
ORDER BY p.ID, o3.isPrimary

我不认为你需要外部组或限制条款,但我必须看到结果设置是确定的。最大的问题是如果你有多个具有相同id和startdate的记录,在这种情况下你需要在另一个字段上聚合以获得唯一性。

答案 2 :(得分:1)

加入并未查看数据的存储顺序。在您的查询中,数据的显示顺序由GROUP BY子句确定(除非您提及ORDER BY,否则会隐式排序数据)。

以下查询可能有所帮助。如果不是,请告诉我。

select * from `Profiles`
left join Orgs job  on `Profiles`.`ID` = Orgs.`ID` 
group by `Profiles`.`ID`
by order by job.isPrimary  
limit 0,2