小编Rah*_*ani的帖子

对单表使用 Merge 语句

是否可以对单表使用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: 无法在源表中获取稳定的行集

也许我做的事情完全错误。谁能帮帮我吗。

sql oracle

3
推荐指数
1
解决办法
5507
查看次数

根据当前日期从Oracle的叶子中获取根节点

我想在叶子和当前日期的基础上识别根节点。

我有一个包含数据的表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 数据库。

sql oracle

0
推荐指数
1
解决办法
634
查看次数

标签 统计

oracle ×2

sql ×2