Mysql 通过第二个表连接具有条件的查询
我有两个表一个是用户,第二个是位置 位置是与用户的一对多关系。 我想根据最新位置列出所有用户,条件距离(km)>0.01。有人喜欢吗 我尝试了。语法错误(查询1错误:“where子句”中的未知列“d”) 编辑 桌子 -使用者 -位置(多个)(id、用户id、lat、lng、距离、创建地点) 预期结果Mysql 通过第二个表连接具有条件的查询,mysql,sql,Mysql,Sql,我有两个表一个是用户,第二个是位置 位置是与用户的一对多关系。 我想根据最新位置列出所有用户,条件距离(km)>0.01。有人喜欢吗 我尝试了。语法错误(查询1错误:“where子句”中的未知列“d”) 编辑 桌子 -使用者 -位置(多个)(id、用户id、lat、lng、距离、创建地点) 预期结果 -最新位置距离小于0.1(双倍距离)的用户列表(不重复)您可以使用窗口功能: select t.* from (select u.*, l.*, row_number()
-最新位置距离小于0.1(双倍距离)的用户列表(不重复)您可以使用窗口功能:
select t.*
from (select u.*, l.*,
row_number() over (partition by u.id order by l.created_at desc) as seq
from users u inner join
locations l
on l.user_id = u.id
) t
where seq = 1 and distance > 0.01;
您可以使用窗口功能:
select t.*
from (select u.*, l.*,
row_number() over (partition by u.id order by l.created_at desc) as seq
from users u inner join
locations l
on l.user_id = u.id
) t
where seq = 1 and distance > 0.01;
WHERE
子句中不允许使用派生列d
,但可以使用HAVING
子句:
having d > 0.01
如果不能使用窗口函数,另一种获得所需结果的方法是将表连接到一个查询,该查询使用NOT EXISTS
返回所需的位置:
select u.*, t.distance
from users u inner join (
select l.* from locations l
where not exists (select 1 from locations where user_id = l.user_id and created_at > l.created_at)
and l.distance > 0.01
) t on t.user_id = u.id
WHERE
子句中不允许使用派生列d
,但可以使用HAVING
子句:
having d > 0.01
如果不能使用窗口函数,另一种获得所需结果的方法是将表连接到一个查询,该查询使用NOT EXISTS
返回所需的位置:
select u.*, t.distance
from users u inner join (
select l.* from locations l
where not exists (select 1 from locations where user_id = l.user_id and created_at > l.created_at)
and l.distance > 0.01
) t on t.user_id = u.id
样本数据和期望的结果将非常有用。如何计算距离?@Gordon Linoff插入时自动计算距离。我们应该猜猜看吗?MySQL不返回简洁的“语法错误”。返回的错误通常有一个有用的提示,错误号在MySQL文档中有描述。是的,查询1错误:“where子句”样本数据和所需结果中的未知列“d”将非常有用。如何计算距离?@Gordon Linoff插入时自动计算距离。我们应该猜猜看吗?MySQL不返回简洁的“语法错误”。返回的错误通常有一个有用的提示,错误号在MySQL文档中有描述。是的,查询1错误:“where子句”中的未知列“d”