Oracle查询查找表中不存在的记录?

Posted

技术标签:

【中文标题】Oracle查询查找表中不存在的记录?【英文标题】:Oracle query to find records in a table that don't exist? 【发布时间】:2018-03-22 19:45:45 【问题描述】:

这可能是一个简单的查询,但我似乎无法编写它。

如何进行查询以查找表中没有以下值的所有记录

所以对于下面的账户,我需要插入到这个表中 价值观

Account = Test003
Role    = Owner
Grp     = AO1

因为这个表没有任何列具有 Role 或 Grp = 到上面

--------------------------------------------------
| ACCOUNT          |   ROLE  |    GRP   |
--------------------------------------------------

| Test003          | Overlay |    WAD    |

【问题讨论】:

你的问题不是很清楚。您是否尝试:A) 查询所有没有值 Account = Test003、Role = Owner 和 Grp = AO1 的行?或者您是否尝试 B) 将这些值插入相关表中? 【参考方案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 上创建一组多个查询。

【讨论】:

【参考方案2】:

我是这样理解这个问题的:

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>

上面的示例数据意味着我应该为帐户 test002 和 test004 插入“所有者”和“a01”,因为它们既没有 role = owner 也没有 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>

【讨论】:

以上是关于Oracle查询查找表中不存在的记录?的主要内容,如果未能解决你的问题,请参考以下文章

查询输出表中不存在的值

Hive实现oracle的Minus函数

HQL 左外连接用于查找一个表中存在而其他表中不存在的记录

oracle查询重复数据方法

如何确定Oracle数据库表中重复的记录

oracle 查找删除重复数据