MYSQL - 组合前左连接的最高值

时间:2016-03-09 09:57:06

标签: mysql sql left-join

我希望我的左连接按ID DESC排序,但我不能让它工作。

SELECT u.ID,
       u.ftyp,
       u.navn,
       u.etternavn,
       u.adresse,
       u.status,
       u.kontaktperson,
       u.email,
       u.telenr
FROM
    (SELECT * FROM `user` ORDER BY ftyp ASC, navn ASC) AS u LEFT JOIN 
    (SELECT * FROM `timesheet` ORDER BY ID DESC) AS t ON t.userID = u.ID 
GROUP BY t.userID
ORDER BY u.ftyp ASC, t.ID DESC

首先在ftyp之后排序,然后在它组合在一起之前的时间表中的最高ID。

编辑:

如果你看一下

DB

此处的结果应为

John,Thea,Erik,Hot

1 个答案:

答案 0 :(得分:1)

没有任何样本数据,很难找出你想要的东西。

但是,您要在连接之前对数据进行排序,并且不确定结果。可能是你想要的,也可能不是。但可能会改变MySQL的未来版本,甚至只是交换数据库引擎。

LEFT OUTER JOIN似乎无关紧要(除非你想要1个随机用户详细信息,因为GROUP BY代表所有没有时间表的人)。

最好使用子查询获取每个用户的最新时间表,然后将其加入用户和时间表。假设时间表表有一个唯一的id字段,它是升序的,然后是这样的: -

SELECT u.ID,
       u.ftyp,
       u.navn,
       u.etternavn,
       u.adresse,
       u.status,
       u.kontaktperson,
       u.email,
       u.telenr
FROM `user` u 
INNER JOIN 
(
    SELECT userID, MAX(id) AS max_id FROM `timesheet` GROUP BY userID
) t_sub 
ON t_sub.userID = u.ID 
INNER JOIN `timesheet` t
ON t_sub.userID = t.userID
AND t_sub.max_id = t.id
ORDER BY u.ftyp ASC, t.ID DESC