【问题标题】:Update multiple rows in a table from another table when condition exists条件存在时从另一个表更新一个表中的多行
【发布时间】:2021-08-11 20:30:11
【问题描述】:

我有两张桌子。

Table1 包含在名为the_geom 的列中使用纬度/经度坐标进行地理参考的公司

Table2 还包含来自 Table1 的相同公司(未进行地理参考),以及其他数百家地址已进行地理参考的公司。

我需要做的就是将来自Table1 公司的the_geom lat/lng 值插入到他们在Table 2 中的相应条目中。这些插入可以基于的共同点是address 列。

简单的问题,我敢肯定,但我很少使用 SQL。

【问题讨论】:

  • 你不在这里插入行,你更新。

标签: sql postgresql sql-update postgis


【解决方案1】:

假设由

插入“the_geom”纬度/经度值

您实际上是指UPDATE table2 中的现有行:

UPDATE table2 t2
SET    the_geom = t1.the_geom
FROM   table1 t1
WHERE  t2.address = t1.address
AND    t2.the_geom IS DISTINCT FROM t1.the_geom;  -- avoid empty updates

相关答案:

还假设address 列具有UNIQUE 值。
Details for UPDATE in the manual

【讨论】:

  • 是的,正是我的意思,这成功了。谢谢欧文。
  • @LP13:是的。如果您点击我提供的手册的链接,您会在顶部的“概要”中看到UPDATE [ ONLY ] table_name [ * ] [ [ AS ] alias ]。 (其他一些 RDBMS 的语法有所不同,请参阅同一页面底部的“兼容性”。)
  • UPDATE table2 SET the_geom = t1.the_geom FROM table1 t1, table2 t2 WHERE t2.address = t1.address AND t2.the_geom IS DISTINCT FROM t1.the_geom;
  • @AMRESHPANDEY:对table2 的附加连接是多余的。 (或者你想告诉我们什么?)
  • @coderzzz18:Oracle 没有用于 UPDATEFROM 子句。请参阅:postgresql.org/docs/current/sql-update.html#id-1.9.3.182.10 有几种选择(不像 IMO 那样直接)请参阅:docs.oracle.com/cd/B28359_01/server.111/b28286/…stackoverflow.com/q/7030699/939860
【解决方案2】:

我遇到了类似的问题,但是当我尝试上面提到的解决方案时,我收到了类似的错误

't2' 附近的语法不正确

对我有用的代码是:

UPDATE table2
SET the_geom = t1.the_geom
FROM table1 as t1
WHERE table2.address = t1.address AND table2.the_geom <> t1.the_geom

我知道我的答案晚了 5 年,但我希望这能帮助像我这样找不到此解决方案的人。

【讨论】:

    【解决方案3】:

    如果你是 mysql 用户(像我一样)并且上面的脚本不起作用,这里是 mysql 等价的。

    UPDATE table2 t2, table1 t1
    SET    the_geom = t1.the_geom
    WHERE  t2.address = t1.address
    AND    t2.the_geom <> t1.the_geom; -- avoid empty updates
    

    所有功劳归于 OP。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 2012-08-02
      相关资源
      最近更新 更多