【发布时间】:2021-08-26 16:20:00
【问题描述】:
我有一个表格“摘要”,我想在其中按 id 保留一些摘要数字 另一个表“foo”。这是使用 UPDATE FROM 的更新查询,似乎 工作
UPDATE summary
SET sum1 = t.sizes,
sum2 = t.counts
FROM (SELECT id,
sum(size) AS sizes,
sum(count) AS counts
FROM foo
WHERE id IN (SELECT id
FROM summary)
GROUP BY id) t
WHERE t.id = summary.id;
此查询适用于 Postgresql,但在 HSQL 中失败,因为 UPDATE FROM 不是标准 SQL。
问题,如何用标准 SQL 重写这个查询?
PS:它可能是“标准 SQL”。所以要更具体一些。当我在 HSQLDB 中执行此查询时,我收到此错误:
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: T.SIZES
这可能是我真正需要的——如何让这个查询与 HSQLDB 一起工作。
【问题讨论】:
-
没有方便的方法来重写它。
-
ANSI 标准对于复杂的更新来说很尴尬。几乎没有人完全实现它,每个 DB 实现它都有点不同,而且他们在标准机构中的代表都不能就解决问题的方法达成一致(或者不愿意妥协他们自己现有的语法)。
-
这是标准 SQL - sql 中没有 UPDATE FROM
-
HSQL 抛出此异常:
Caused by: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: T.SIZES。可能问题不在于引用 T 的 UPDATE/FROM。 -
该消息与语法无关。这是关于权限的。
标签: sql postgresql hsqldb