基于内部连接oraclesql的Insert
我有一个表a,有三列a、b、c。我想根据c列与另一个表b的联接,在a列和b列中插入值 我正在使用以下查询基于内部连接oraclesql的Insert,sql,database,oracle,plsql,oracle11g,Sql,Database,Oracle,Plsql,Oracle11g,我有一个表a,有三列a、b、c。我想根据c列与另一个表b的联接,在a列和b列中插入值 我正在使用以下查询 MERGE INTO A USING (SELECT * FROM B) **B** ON (B.c=A.c) WHEN MATCHED THEN INSERT(a,b) VALUES(local_varialble,'STRING'); 我得到以下错误 PL/SQL : ORA-00905 : MISSING KEYWORD 请帮忙!!这个问题似乎总是很棘手 编辑:我发现使用!=在ON
MERGE INTO A
USING
(SELECT * FROM B) **B**
ON (B.c=A.c)
WHEN MATCHED THEN
INSERT(a,b) VALUES(local_varialble,'STRING');
我得到以下错误
PL/SQL : ORA-00905 : MISSING KEYWORD
请帮忙!!这个问题似乎总是很棘手
编辑:我发现使用!=在ON条件下,并在不匹配的情况下使用进行后续编译。。但是我不知道它是否会产生正确的结果我认为您需要首先定义一个merge\u update\u子句,请参见 像这样:
MERGE INTO A
USING (SELECT * FROM B) b
ON (B.c = A.c)
WHEN MATCHED THEN UPDATE SET ....
DELETE WHERE ...
WHEN NOT MATCHED THEN INSERT ...
未测试,但请将sql更改为
MERGE INTO A
USING
(SELECT * FROM B) B
ON (B.c=A.c)
WHEN MATCHED THEN
INSERT(a,b) VALUES(lorcal_varialble,'STRING');
我补充说
(SELECT * FROM B) B
到您的sql
当您使用select引用时,您应该像我一样给它取别名您在这里到底想实现什么?当表A和B中的行之间存在连接时,您希望向表A中插入一些数据,但不使用B列中的任何列中的值 Merge的工作方式与编写它的方式不同,因为在WHEN MATCHED THEN子句中必须有UPDATE或DELETE语句,而不能有INSERT语句。另一方面,在WHEN NOT MATCHED THEN类中,只能使用INSERT 有关合并的更多信息,请参见此处: 如果从=更改为!=,这是行不通的,因为这样您将在合并的WHEN NOT MATCHED then部分中进行插入,而您想要的是在记录之间存在匹配时进行插入
总之,你想达到什么目标?我认为您不应该在这种特定情况下使用MERGE,而应该使用一个简单的INSERT,该INSERT具有定义良好的条件,即应该插入哪些行以及从何处插入。我在查询中使用了别名,只是忘了在这里提及它。尽管如此,查询仍然不起作用对不起,但是为什么要使用Merge语句呢?