我希望我的左连接按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。
编辑:
如果你看一下
此处的结果应为
John,Thea,Erik,Hot
答案 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