语法:
MERGE INTO [your table-name] [rename your table here]
USING ( [write your query here] )[rename your query-sql and using just like a table]
ON ([conditional expression here] AND [...]...)
WHEN MATHED THEN [here you can execute some update sql or something else ]
WHEN NOT MATHED THEN [execute something else here ! ]
这个语句在处理具有主从关系的表时没丝毫问题。我以前用的时候都是多表操作。我今天实现在一个表里面Merge into时却出了问题,研究了好久,终于搞定。
错误的sql语句:
merge into XJ_BK_FZY_TIMESET
a
using (select zxnj from XJ_BK_FZY_TIMESET
where zxnj = '2006') b on (b.zxnj='2006')
when matched then update set a.endtime = '20100519' where a.zxnj = '2004'
when not matched then insert(a.zxnj, a.endtime) values('2006', '20100519')
注: XJ_BK_FZY_TIMESET(学籍_本科_分专业_时间设置):表中只有两个字段:zxnj:在学年级,endTime:截止时间。
这个sql的目的是XJ_BK_FZY_TIMESET表中存在zxnj=2006的数据时,执行update操作,否则执行insert操作。
这个sql从语法上是没错的而且程序是能够执行的
。
XJ_BK_FZY_TIMESET现在没有数据,执行上面的sql后,仍没有数据。手工插入一条zxnj=2006的数据后这条sql却能执行update操作。
错误原因:
Merge Into执行时,会从using 搜出来的结果逐条与 on条件匹配,然后决定是update还是Insert。
所以using后面的sql没有查询到数据这个Merge Into语句是不会执行update和Insert操作的。
单表操作时建议写成两个SQL
分享到:
相关推荐
非常经典的SQL经验,适合于数据库初学者及长期从事软件开发者
首先,需要使用Oracle 9i及其以后版本支持的merge into语句,该语句可以实现insertOrUpdate的功能。然后,使用Mybatis的动态SQL语法foreach循环插入,待插入的实体bean的List通过查询数据库dual形成表。foreach的 ...
在Oracle 9i中,`MERGE INTO`语句首次被引入,它允许在同一语句中执行`INSERT`和`UPDATE`操作。到了Oracle 10g,这个功能得到了进一步增强,使其更加强大和灵活。通过`MERGE INTO`,可以基于源表和目标表之间的匹配...
在SQL语言中,`MERGE INTO`语句是一种强大的工具,用于合并两个数据集,它允许根据特定条件将数据从一个源(通常是临时表或视图)插入或更新到目标表。这个操作通常被称为“合并”或“ Upsert”,因为它可以实现插入...
在Oracle 9i版本中,Merge Into 的引入使得开发者能够同时执行更新(UPDATE)和插入(INSERT)操作,而到了Oracle 10g及后续版本,这一功能得到了进一步增强,提供了更丰富的条件选择和操作选项。 ### 知识点详述:...
通过 Merge Into 语句,我们能够在一个语句中对一个表同时执行 Insert 和 Update 操作,根据这个表或子查询的连接条件对另一个表进行查询,连接条件匹配上的进行 Update 操作,并且在其后面还可以接删除操作,无法...
在Oracle数据库中,`MERGE INTO`语句是一种强大的数据操作工具,它允许你在一个步骤中执行更新(UPDATE)和插入(INSERT)操作,从而提高了数据处理的效率和灵活性。这个命令尤其适用于需要同步两个表的数据时,比如...
- 基本语法:`MERGE INTO 目标表 USING 来源表 ON (匹配条件) WHEN MATCHED THEN UPDATE SET 更新列 = 新值 WHEN NOT MATCHED THEN INSERT (插入列) VALUES (插入值);` - `WHEN MATCHED THEN`部分定义了当源表和...
1. 在 Merge 语句中,update 不能用于更新连接的列。例如: ```sql MERGE INTO merge_test2 M USING merge_test1 N ON (M.a = N.a) WHEN MATCHED THEN UPDATE SET M.a = N.b, M.b = N.b WHEN NOT MATCHED THEN ...
虽然`MERGE INTO`本身不直接支持删除操作,但可以通过在`WHEN MATCHED THEN`部分使用`DELETE`语句结合特定条件来实现,例如删除不再存在于源表中的目标表记录。 通过这些用法,我们可以高效地管理数据,并在单个...
为了解决这个问题,我们可以修改`MERGE`语句,使其在源数据集为空时也能正确执行。下面是一个修正后的示例: ```sql DECLARE @UserName VARCHAR(10) = 'user7'; -- 表示某个登陆的用户名 MERGE INTO TargetTable ...
`MERGE`语句在Oracle数据库中是一种非常实用的DML操作,它结合了`INSERT`、`UPDATE`和`DELETE`的功能,使得在处理数据时更加高效且简洁。这个语句自Oracle 9i版本开始引入,主要用于解决在两个数据源之间进行有条件...
【知识点详解】 `MERGE`语句是数据库操作中一种非常强大的工具,它结合了`INSERT`, `UPDATE`, 和 `DELETE`的功能,可以一次性处理...在数据库管理和ETL过程中,合理运用`MERGE`能有效地提高数据处理的效率和准确性。
1. **UPDATE或INSERT子句成为可选项**:与Oracle 9i不同的是,在Oracle 10g中,`MERGE`语句允许用户只指定`UPDATE`或`INSERT`中的任意一个操作。 2. **支持WHERE子句**:在`UPDATE`和`INSERT`子句后可以添加`WHERE`...
1)主要功能 提供有条件地更新和插入数据到数据库表中 如果该行存在,执行一个UPDATE操作,如果是一个新行,执行INSERT操作 — 避免了分开更新 — 提高性能并易于使用 — 在数据仓库应用中十分有用 2)MERGE语句的...
在给定的实例中,`MERGE INTO`被用来解决特定的业务需求,涉及两个具有相同结构但数据可能不完全匹配的表:一个正式表(Z_TABLE)和一个临时表(L_TABLE)。 首先,我们要理解`MERGE INTO`的基本语法: ```sql ...