sql - SQL中的多对一行更新?
问题描述
所以我试图将临时表中的数据更新到主表中。
我们将这些表称为临时表和服务表。
伪代码将是这样的......
Sort temp by inserted_on
When service_id and location match in both tables:
If temp.column1 is not null, replace services.column1
If temp.column2 is not null, replace services.column2
etc...
虽然我在临时表中有多个与条件匹配的源行时,但并非所有字段都在更新,但我已经完成了这一工作。
例如,我可能有两行具有相同的 service_id 和位置,其中一行 column1 为空,column2 有一个值,而下一行则相反。我需要按照它们进来的顺序一一更新,并在必要时覆盖旧数据。
我还需要加入 UPDATE 中的临时表来检索我匹配的键。
我试过下面的代码,但它似乎只更新了某些行,我不太清楚它背后的逻辑是什么。
我不担心订单,我只是想弄清楚为什么当有数据准备好填补空白时它会留下一些空白。
UPDATE sloc
SET
sloc.ata = COALESCE(tmp.ata, sloc.ata),
sloc.atd = COALESCE(tmp.atd, sloc.atd),
sloc.atp = COALESCE(tmp.atp, sloc.atp),
sloc.eta = COALESCE(tmp.eta, sloc.eta),
sloc.etd = COALESCE(tmp.etd, sloc.etd),
sloc.etp = COALESCE(tmp.etp, sloc.etp),
sloc.plat = COALESCE(tmp.plat, sloc.plat),
sloc.plats_up = COALESCE(tmp.plats_up, sloc.plats_up),
sloc.cis_plats_up = COALESCE(tmp.cis_plats_up, sloc.cis_plats_up)
FROM
services_locations sloc
INNER JOIN services svc ON svc.id = sloc.sid
INNER JOIN ref_tiploc tloc ON tloc.id = sloc.tpl_id
INNER JOIN trainstatus_tmp tmp ON svc.rid = tmp.rid AND tloc.tpl = tmp.tpl
解决方案
推荐阅读
- mysql - 在 mysql 5.7 的 docker 容器上访问被拒绝
- python - 如何选择只有一个元素非 nan 值的行,其余的都是 NaN?
- ms-office - pptx 文件中的特定占位符 id
- kubernetes - Kubernetes API 预算消耗错误
- javascript - 将 json 对象转换为表单序列化数据
- php - Laravel 使用关系从 Query 中的 Array 获取单个项目
- powershell - 尝试使用 Powershell 在另一台服务器上远程运行 exe 并失败
- docker - Github Actions Docker 找不到文件
- javascript - reactjs中的img标签未显示在渲染上
- javascript - 节点应用程序不处理发布请求