0

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

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

我觉得我可能在这里很近,但有人可以提供一些见解吗?

4

3 回答 3

2

为什么在这里使用子选择?为什么不只是:

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
于 2013-09-16T17:15:57.727 回答
1

Join 看不到数据的存储顺序。在您的查询中,显示数据的顺序由 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
于 2013-09-16T17:57:26.287 回答
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

我不认为您需要 externalgroup by 或 limit 子句,但我必须看到结果集才能确定。最大的问题是,如果您可能有多个具有相同 id 和 startdate 的记录,在这种情况下,您还需要在另一个字段上进行聚合以获得唯一性。

于 2013-09-16T17:52:32.370 回答