Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于内部连接oraclesql的Insert_Sql_Database_Oracle_Plsql_Oracle11g - Fatal编程技术网

基于内部连接oraclesql的Insert

基于内部连接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

我有一个表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\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语句呢?