Oracle合并到..不匹配时插入..-我可以使用Alias吗



这里有一个简化的表格示例:

MAGIC_TABLE
titi | tata
-----------
val1 | magic1
val2 | magic2
val3 | magic1
val4 | magic1
val5 | magic2

我想要实现的是->

对于具有tata = 'magic2'titi中某个值的每一行,如果不存在具有相同titi值的'magic1',则我应该添加具有titi.value'magic1'的行

以下是我正在处理的SQL oracle查询的简化版本:

merge into MAGIC_TABLE magic
using (
with UNMAGIC_TABLE as (
select titi, tata from MAGIC_TABLE
and tata='magic1'
)
SELECT titi, tata from UNMAGIC_TABLE 
) really_unmagic
on 
(
magic.titi = really_unmagic.titi
magic.tata = really_unmagic.tata
and magic.tata='magic2'
) 
when not matched then insert (titi, tata) 
values 
(magic.titi, 'magic1');

不知怎么的,我一直得到这个错误:

ORA-38101:INSERT VALUES子句中的列无效:"MAGIC"。"TITI">

所以我想知道这是否是别名的语法问题?我做错了什么?

EDIT:这是一个疏忽错误,正如George Joseph所指出的,我必须使用unreally_magic才能使其工作,因为当它不匹配时,我没有来自magic的行

如果我是你,我会这样写合并语句:

MERGE INTO magic_table tgt
USING (SELECT titi,
'magic1' tata
FROM   magic_table
WHERE  tata = 'magic2') src
ON (tgt.titi = src.titi AND tgt.tata = src.tata)
WHEN NOT MATCHED THEN
INSERT (tgt.titi,
tgt.tata)
VALUES (src.titi,
src.tata);

我不知道为什么,但似乎我必须使用really_unmagic才能使其工作,所以我还必须更改两个where子句,以便在values中获得正确的所需数据。但我仍然不知道为什么第一个查询不起作用。

merge into MAGIC_TABLE magic
using (
with UNMAGIC_TABLE as (
select titi, tata from MAGIC_TABLE
and tata='magic2'
)
SELECT titi, tata from UNMAGIC_TABLE 
) really_unmagic
on 
(
magic.titi = really_unmagic.titi
magic.tata = really_unmagic.tata
and magic.tata='magic1'
) 
when not matched then insert (titi, tata) 
values 
(really_unmagic.titi, 'magic1');

相关内容

最新更新