她是我的桌子结构:
表1:track_data
| device_id(foreign) | latitude | longitude | activity |
- 存储id,位置坐标,活动是插入它们的时刻。
表2:user_devices
| device_id(primary) | park_lat | park_long |
存储id,park_lat / park_long需要根据请求从track_data表中以纬度/经度存储(即最新的活动数据)。 现在,我将如何在一个查询中将最新的纬度/经度从Table1存储到Table2。这是可能的,要在同一查询中混合选择和更新吗?
现在我的无效直观查询:)
UPDATE user_devices,track_data
SET user_devices.park_lat = latitude,user_devices.park_long = longitude
WHERE user_devices.id='33' AND track_data.activity=(SELECT activity FROM track_data
ORDER BY track_data.activity DESC LIMIT 1)
答案 0 :(得分:1)
update user_devices
join (select device_id, latitude, longitude, activity
from (select device_id, latitude, longitude, activity
from track_data order by device_id, activity desc) x
group by device_id) latest_lat_long on latest_lat_long.device_id = user_devices.device_id
set
park_lat = latest_lat_long.latitude,
park_long = latest_lat_long.longitude;
这是如何运作的:
这个查询会表现得非常好,因为它不会像某些人本能地那样对每行进行查询。