我正进入(状态 ORA-30926:无法在源表中获得稳定的一组行 在以下查询中: MERGE INTO table_1 a USING (SELECT a.ROWID row_id, 'Y' FROM table_1 a ,table_2 b ,table_3 c WHERE a.mbr = c.mbr AND b.head = c.head AND b.type_of_action <> '6') src ON ( a.ROWID = src.row_id ) WHEN MATCHED THEN UPDATE SET in_correct = 'Y'; 我已经运行了table_1它有数据,而且我运行了也有数据的内部查询( src )。 为什么会出现这个错误,怎么解决?
这里一个非常常见的问题是如何做一个upsert,这就是MySQL调用INSERT … ON DUPLICATE UPDATE和标准支持作为MERGE操作的一部分。 鉴于PostgreSQL不直接支持(在第9.5页之前),你如何做到这一点? 考虑以下几点: CREATE TABLE testtable ( id integer PRIMARY KEY, somedata text NOT NULL ); INSERT INTO testtable (id, somedata) VALUES (1, 'fred'), (2, 'bob'); 现在设想你想要“插入”元组(2, 'Joe') , (3, 'Alan') ,所以新的表格内容是: (1, 'fred'), (2, 'Joe'), — Changed value of existing tuple (3, 'Alan') — Added new tuple 这就是人们在讨论一个upsert时候正在讨论的问题。 至关重要的是,任何方法在同一个表上进行多个事务的情况下都必须是安全的 – […]
几个月前,我从Stack Overflow的一个答案中学习了如何在MySQL中使用以下语法一次执行多个更新: INSERT INTO table (id, field, field2) VALUES (1, A, X), (2, B, Y), (3, C, Z) ON DUPLICATE KEY UPDATE field=VALUES(Col1), field2=VALUES(Col2); 我现在切换到PostgreSQL,显然这是不正确的。 这是指所有正确的表,所以我认为这是一个不同的关键字正在使用的问题,但我不知道这是在PostgreSQL文档涵盖。 为了澄清,我想插入几件事情,如果他们已经存在,以更新它们。