将其他表的值添加到 h2 中当前表的值

Posted

技术标签:

【中文标题】将其他表的值添加到 h2 中当前表的值【英文标题】:Adding value from other table to value of the current table in h2 【发布时间】:2019-10-11 14:52:26 【问题描述】:

我有一张桌子medicine,还有一张桌子cart。两者都有一个字段名称quantityid。 如果id 相等,我想将cart.quantity 添加到medicine.quantity

由于我正在将代码从 mysql 转换为 h2,因此我尝试了使用 MODE=MySQL 的 MySQL 兼容模式,但以下代码不起作用

update medicine, cart 
set medicine.quantity = medicine.quantity+cart.quantity 
where medicine.id = cart.id;

我尝试使用官方文档中给出的 select 语句

update medicine med1 
set med1.quantity = med1.quantity+
                   (select cart.quantity from cart where cart.id = med1.id)

当 id 匹配时,我希望输出是数量的总和 但是在执行更新操作后,我在 medicine.quantity 中为所有行获取 NULL 值。

什么可以改变,使medicine.quantity在没有id匹配时保持不变,或者在id匹配时添加cart.quantity

【问题讨论】:

【参考方案1】:

该更新语句正在更新表中的所有记录。所以med1.quantity 字段将更新为 NULL,如果购物车表中没有 ID 记录。

你应该在 so 之后添加一个WHERE 子句:

update medicine med1 
set med1.quantity = med1.quantity+
(select cart.quantity from cart where cart.id = med1.id)
where med1.id in (Select cart.id from cart)

【讨论】:

【参考方案2】:

我使用 where exists 解决了它

set quantity = quantity +
                (select quantity from cart where id = med1.id) 
where exists (select quantity from cart where id = med1.id)"

【讨论】:

以上是关于将其他表的值添加到 h2 中当前表的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用临时表的情况下检索当前行和先前行的值之间的值差异?

为什么我的Python脚本将Postgres表的所有行设置为相同的值?

oracle中如何对多张表进行动​​态选择查询?使用表名和列名作为其他表的值?

添加两个变量,其中包含来自同一数据库的两个不同表的值

两个表匹配,匹配上把一张表的值复制到另一张表的sql语句怎么写

SQL 从多行的另一张表的余额中扣除一个表中的值