首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更新数据库表中某些行,同时处理同一表中的数据?

如何更新数据库表中某些行,同时处理同一表中的数据?
EN

Stack Overflow用户
提问于 2021-06-18 15:58:32
回答 1查看 41关注 0票数 0

我必须编写一条update语句来更新数据库表中的一串值。

首先是一个简单的介绍。我们的客户来自运输和物流行业。他们在需要建筑材料的人和那些拥有运输公司并提供运输服务的人和卡车司机之间提供运输(建筑材料)服务。

司机可以得到询问,在那里他需要做一些送货和取货。例如,一次查询可以由三次浏览组成。他可以开始巡视,拾取材料,交付材料,拾取废物(在他投放材料的同一建筑工地),开始新的分团,交付废物,拾取材料,开始新的分团,交付材料和子分团,最后结束整个巡演。

还有websocket,它可以探测司机的位置(移动客户端),并在tour_log表中记录经度和纬度。因此,每30秒就会跟踪一次位置。

在图中,您可以看到该表的一部分是什么样子。该表有超过一百万条记录。

当驱动程序完成子巡视时,web (spring-boot)服务不会保存到该驱动程序结束的子巡视(SUBTOUR_END)的数据库中。我更新了该服务,但我们的客户,将需要一些报告的旅游和查询一些较早的时期。我需要执行更新才能完成报告功能。

所以,说到要点。我确实有一个明显不起作用的查询。我不能同时更新正在查询数据的表。

代码语言:javascript
复制
UPDATE tour_log 
SET tour_id = (SELECT tour_id FROM tour_log A 
               WHERE tour_log_id = (SELECT (tour_log_id) 
                                    FROM tour_log B 
                                    WHERE tour_id IS NULL AND log = "SUBTOUR_END" AND A.tour_log_id = B.tour_log_id - 1)) 
WHERE log = "SUBTOUR_END" AND tour_id is null AND inquiry_id = 7519646; -- I'm doing update for single inquiry only

有没有人能给我个提示,告诉我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-18 16:13:43

测试

代码语言:javascript
复制
UPDATE tour_log t1
JOIN tour_log t2 ON t1.truck_id = t2.truck_id 
                AND t1.tour_log_id > t2.tour_log_id
LEFT JOIN tour_log t3 ON t1.truck_id = t3.truck_id 
                AND t1.tour_log_id > t3.tour_log_id
                AND t3.tour_log_id > t2.tour_log_id
SET t1.tour_id = t2.tour_id
WHERE t1.log = 'SUBTOUR_END'
  AND t3.tour_log_id IS NULL

例如,从前一个相邻行复制tour_id到带有'SUBTOUR_END'的行(t3用于检查它们之间是否没有行)。

用于排序的是tour_log_id,而不是timestamp,因为最后一个可能有重复项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68031486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档