这可能是一个简单的查询,但我似乎无法写出来。
如何在表格中查找表格中没有以下值的所有记录的查询
因此对于以下帐户,我需要插入此表 值
Account = Test003
Role = Owner
Grp = AO1
因为此表没有任何具有Role或Grp =的列到上面的
--------------------------------------------------
| ACCOUNT | ROLE | GRP |
--------------------------------------------------
| Test003 | Overlay | WAD |
答案 0 :(得分:1)
要进行MERGE工作,请使用DUAL表为要搜索的值生成一行。
merge into your_table yt
using ( select 'Test003' as acct
, 'Owner' as role
, 'AO1' as grp
from dual ) q
on (yt.account = q.acct
and yt.role = q.role
and yt.grp = q.grp)
when not matched then
insert (account, role, grp)
values (q.acct, q.role, q.grp)
如果要合并多个记录,可以在USING中使用UNION ALL在DUAL上创建一组多个查询。
答案 1 :(得分:0)
这就是我理解这个问题的方法:
SQL> create table test
2 (account varchar2(10),
3 role varchar2(10),
4 grp varchar2(10));
Table created.
SQL> -- insert sample data
SQL> insert into test
2 (select 'test001', 'actor' , 'a01' from dual union --> contains GRP
3 select 'test002', 'director', 'd02' from dual union
4 select 'test003', 'owner' , 'a01' from dual union --> contains ROLE and GRP
5 select 'test004', 'overlay' , 'wad' from dual
6 );
4 rows created.
SQL>
以上示例数据意味着我应该插入"所有者"和" a01"对于帐户test002和test004,因为他们没有角色=所有者和grp = a01
SQL> insert into test (account, role, grp)
2 (select x.account, 'owner', 'a01'
3 from (select account
4 from test
5 where role <> 'owner'
6 and grp <> 'a01'
7 ) x
8 );
2 rows created.
SQL> select * from test
2 order by account, role, grp;
ACCOUNT ROLE GRP
---------- ---------- ----------
test001 actor a01
test002 director d02
test002 owner a01
test003 owner a01
test004 overlay wad
test004 owner a01
6 rows selected.
SQL>