很多情况下人们需要在左连接中订购,我目前正试图从一组用户中找到最新的工作列表,不幸的是,我无法让它运行,我现在拥有的是:
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
我觉得我很可能在这附近,但任何人都可以提供一些见解吗?
答案 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