我想从用户表中获取所有数据&从我的connection_history表中与他关联的最后一条记录,只有当我在查询结束时没有添加时才能正常工作
ORDER BY contributions DESC
(当我添加它时,我只有来自用户的记录,而不是最后的connection_history记录)
我的问题是:我如何获得捐款DESC订购的entires数据
SELECT * FROM users LEFT JOIN connections_history ch ON users.id = ch.guid
AND EXISTS (SELECT 1
FROM connections_history ch1
WHERE ch.guid = ch1.guid
HAVING Max(ch1.date) = ch.date)
答案 0 :(得分:2)
order by
不应影响返回的结果。它只会改变顺序。你可能正在以意想不到的顺序得到你想要的东西。例如,您的查询接口可能返回固定数量的行。更改行的顺序可能会使结果集看起来不同。
为了达到这个目的,我会说=
比EXISTS
更直观:
SELECT *
FROM users u LEFT JOIN
connections_history ch
ON u.id = ch.guid AND
ch.date = (SELECT Max(ch1.date)
FROM connections_history ch1
WHERE ch.guid = ch1.guid
)
ORDER BY contributions DESC;
原因是=
直接在ON
子句中,因此很清楚表之间的关系是什么。
答案 1 :(得分:0)
为了您的随意考虑,原始代码的格式不同。请特别注意缩进AND
表示该子句是LEFT JOIN
的一部分,它就是。
SELECT * FROM users
LEFT JOIN connections_history ch ON
users.id = ch.guid
AND EXISTS (SELECT 1
FROM connections_history ch1
WHERE ch.guid = ch1.guid
HAVING Max(ch1.date) = ch.date
)
答案 2 :(得分:0)
我们可以使用嵌套查询首先检查给定用户的max_date,并将guid列表传递给嵌套查询,假设所有用户在连接历史记录表中至少有一条记录,否则您可以改为使用Left Join。 / p>
select B.*,X.* from users B JOIN (
select A.* from connection_history A
where A.guid = B.guid and A.date = (
select max(date) from connection_history where guid = B.guid) )X on
X.guid = B.guid
order by B.contributions DESC;