【问题标题】:H2 update with joinH2 更新加入
【发布时间】:2017-11-08 14:48:31
【问题描述】:

作为开发数据库,​​我使用 MySQL,而对于测试,我使用 H2 数据库。 以下脚本在 MySQL 中运行良好,但在 H2 上运行失败。

UPDATE `table_a`
JOIN `table_b` ON `table_a`.id=`table_b`.a_id
SET `table_a`.b_id=`table_b`.id

在互联网上,我发现 h2 不支持带有 JOINUPDATE 子句。也许有一种方法可以在没有JOIN 子句的情况下重写这个脚本?

顺便说一句,我正在使用 liquibase。也许我可以用它的xml语言写UPDATE子句?

我尝试了以下脚本

UPDATE table_a, table_b
SET table_a.b_id = table_b.id
WHERE table_a.id = table_b.a_id

但我仍然遇到错误。似乎,H2 不支持在一个查询中更新多个表。如何在两个不同的查询中重写此查询以收集 id 并插入它们?

【问题讨论】:

    标签: mysql database h2 liquibase


    【解决方案1】:

    试试这样的:

    update table_a a
    set a.b_id = (select b.id from table_b b where b.a_id = a.id)
    where exists
    (select * from table_b b where b.a_id = a.id)
    

    【讨论】:

    【解决方案2】:

    我花了很多时间进行这种更新。请找出我的评论,也许有人觉得它有用:

    • 对于 WHERE 条件中的每一行执行 SELECT for SET
    • 如果出现错误“标量子查询包含多于一行”- SELECT for SET 返回多于一行。可以使用SELECT COUNT(*) 找到问题行

    另见Scalar subquery contains more than one row

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-18
      • 2013-10-03
      相关资源
      最近更新 更多