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
yushangzfds2008 回答:SQL中多对一的行更新?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3122147.html

大家都在问