【发布时间】:2015-04-27 14:15:41
【问题描述】:
我有两张表如下:
-
serial_table
id CHARACTER VARYING(20), serial_key CHARACTER VARYING(20), PRIMARY KEY(id, serial_key) -
serial_rate:
id CHARACTER VARYING(20), serial_key CHARACTER VARYING(20), rate NUMERIC, PRIMARY KEY(id, 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的答案。
【问题讨论】:
-
你真的打算更新
serial_table.serial_key这个PK组件吗?并且:serial_rate.serial_key是否也应该更新(也是 PK 组件,FK 到第一个)?如果不是:可能会违反 FK 约束。 -
@wildplasser 第一个答案是肯定的,至于第二部分,FK 是 ON UPDATE CASCADE ON DELETE RESTRICT。
-
@JarrodRoberson 我无法理解您为什么认为这个问题与您所链接的问题相似?我在该链接中没有得到我想要的答案。
-
如果您的问题只是关于 SQL 语法,我会删除所有提到的“准备好的语句”。
标签: sql postgresql sql-update common-table-expression