"MERGE INTO NT_PROPERTY ntProp USING ( " +
"SELECT * FROM NT_PROPERTY ) " +
"VALUES " +
"('minDPTObjectId'," + minDPTObjectId + ", 'Starting DPT Object Id') " +
"('maxDPTObjectId', " + maxDPTObjectId + ", 'Ending DPT Object Id') " +
"vt (NAME, VALUE, NOTE) " +
"ON ( ntProp.NAME = vt.NAME ) " +
"WHEN MATCHED THEN " +
"UPDATE SET VALUE = vt.VALUE "+
"WHEN NOT MATCHED THEN " +
"INSERT (NAME, VALUE, NOTE) VALUES (vt.NAME, vt.VALUE, vt.NOTE)";
好吧,我遇到了一个缺少 ON 关键字的错误,并且完全不知道这是怎么回事,还有没有其他方法可以让它不那么笨拙
非常感谢您的帮助。
最佳答案
问题是您的 MERGE 语法不正确。您的陈述采用以下形式:
MERGE INTO nt_property ntprop
USING (SELECT * FROM nt_property)
VALUES (...)
vt (...)
ON (ntprop.name = vt.name)
WHEN MATCHED THEN
UPDATE ...
WHEN NOT MATCHED THEN
INSERT ...;
但它应该是这样的形式:
MERGE INTO target_table tgt_alias
USING source_table_or_subquery src_alias
ON (<JOIN conditions>)
WHEN MATCHED THEN
UPDATE ...
WHEN NOT MATCHED THEN
INSERT ...;
为什么在 using
和 on
子句之间有 VALUES
和 vt
子句?那是不正确的语法。此外,虽然您可以在 using
子句中使用 select * from tablename
,但您可以直接使用 tablename,因为您要选择所有列和所有行。
关于java - SQL MERGE 将值更新或插入到同一个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43908427/