微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql在单个查询中更新多个表

我有2个表格如下:

> serial_table

id CHaraCTER varying(20),serial_key CHaraCTER varying(20),PRIMARY KEY(id,serial_key)

> serial_rate:

id CHaraCTER varying(20),rate NUMERIC,serial_key),FOREIGN KEY (id,serial_key) REFERENCES serial_table(id,serial_key)

现在我想从单个SQL查询更新serial_rate.rate和serial_table.serial_key,如:

UPDATE inventory.serial_table AS s 
JOIN inventory.serial_rate AS r 
ON (s.id,s.serial_key) = (r.id,r.serial_key) 
SET s.serial_key = '0002',r.rate = 22.53
WHERE (s.id,s.serial_key) = ('01','002');

我知道的是不正确的.是否有可能这样做,因为我想使用该语句在Java中创建PreparedStatement?

编辑
这个问题不是关于Java中的PreparedStatements它是关于我希望在创建PreparedStatement时作为参数传递的sql语法.我不想要任何有关PreparedStatement的答案.

解决方法

这是一个CTE的东西(但我不知道如何将它包装成一个准备好的Java东西)

WITH src AS (
        UPDATE serial_rate
        SET rate = 22.53,serial_key = '0002'
        WHERE serial_key = '002' AND id = '01'
        RETURNING *
        )
UPDATE serial_table dst
SET serial_key = src.serial_key
FROM src
-- WHERE dst.id = src.id AND dst.serial_key  = '002'
WHERE dst.id = '01' AND dst.serial_key  = '002'
        ;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐