所以我试图将数据从临时表更新到主表。
我们称这些表为临时表和服务。
伪代码就是这样...
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