这是一个简化的表格示例:
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:“插入值”子句中的无效列:“ MAGIC”。“ TITI”
所以我想知道这是否是别名的语法问题?我在那里做错了什么?
编辑:这是一个疏忽大意的错误,正如乔治·约瑟夫(George Joseph)指出的那样,我必须使用unreally_magic
才能使其正常工作,因为当它不匹配时,我没有{{1 }}
答案 0 :(得分:3)
如果我是你,我会像这样写合并语句:
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);
答案 1 :(得分:1)
我不知道为什么,但是似乎我不得不使用really_unmagic
使其起作用,所以我还必须更改两个where
子句以在{{1}中具有正确的所需数据}。
但是我仍然不知道为什么第一个查询不起作用。
values