是否可以对单表使用merge语句?我想在插入之前检查是否已存在相同的值集,则应更新该记录,如果不存在,则应插入该记录。我在互联网上搜索过,但我得到了带有 2 个表的合并语句的示例。我在一张桌子上尝试过,但无法获得积极的结果。我试图检查的值将是动态的。我想在我的应用程序中使用这个查询。
我正在尝试检查(在下面的情况下仅“主要”列)如果两列匹配,则应更新该记录,如果不匹配,则应插入该记录。
我创建了一个示例表学生。下面是查询。
create table student (sid int,name varchar(20),major varchar(10),gpa float,tutorid int, PRIMARY KEY (sid))
insert into student values(101,'Bill','CIS',3.45,102)
insert into student values(102,'Mary','CIS',3.1,null)
insert into student values(103,'Sue','Marketing',2.95,102)
insert into student values(104,'Tom','Finanace',3.5,106)
insert into student values(105,'Alex','CIS',2.75,106)
insert into student values(106,'Sam','Marketing',3.25,103)
insert into student values(107,'Joan','Finance',2.9,102)
Run Code Online (Sandbox Code Playgroud)
以下是我正在使用的查询
merge into student a
using (select name,major from student) b
on (a.major=b.major)
when matched then
update set a.name='Rahul'
when not matched then
insert(a.SID,a.major) values(123, 'Temp')
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
ORA-30926: 无法在源表中获取稳定的行集
也许我做的事情完全错误。谁能帮帮我吗。
我想在叶子和当前日期的基础上识别根节点。
我有一个包含数据的表tree_table
child_node parent_node start_date end_date
A B 1/1/2009 31/12/2050
B C 1/1/2009 31/12/2010
C D 1/1/2009 31/12/2050
D E 1/1/2009 31/12/2050
Run Code Online (Sandbox Code Playgroud)
获取根节点我正在使用查询
select parent_node from(
SELECT parent_node
FROM tree_table exp
where connect_by_isleaf = 1 and sysdate between start_date and end_Date
START WITH child_node = 'A'
CONNECT BY PRIOR parent_node = child_node order by rownum desc) where rownum=1
Run Code Online (Sandbox Code Playgroud)
但这里的问题是,如您所见,第二条记录不满足条件。我得到了输出
Output: E
Run Code Online (Sandbox Code Playgroud)
这是不正确的,我应该得到输出 B
你能帮我一下吗。我在查询中做错了什么。我正在使用 Oracle 数据库。