找出oracle中具有不同列号的2个表之间的区别

Posted

技术标签:

【中文标题】找出oracle中具有不同列号的2个表之间的区别【英文标题】:find the difference between 2 tables in oracle with different column numbers 【发布时间】:2021-12-30 19:27:43 【问题描述】:

我有 2 组不同的表格,有 2 个公共列。

表 1:学生

NAME ID DEPTID YEAR BATCH
abc 123 987 2020 2
mno 234 987 2020 2
abc 123 765 2020 2
zyz 124 765 2021 1
abc 123 986 2020 2

表 2:映射

ID DEPTID
123 765
234 987
123 986

现在,我正在尝试查找表 STUDENT 中不存在表 MAPPING 的所有详细信息。

例子

NAME ID DEPTID YEAR BATCH MISSING
abc 123 987 2020 2 YES
zyz 124 765 2021 1 YES

我尝试使用 Minus,但如果列相同,它就可以工作。

任何帮助都会很棒。

问候,

阿拜

【问题讨论】:

【参考方案1】:

看起来像一个普通的NOT EXISTS。采样数据直到第 13 行;查询从第 14 行开始。

SQL> with
  2  student (name, id, deptid, year, batch) as
  3    (select 'abc', 123, 987, 2020, 2 from dual union all
  4     select 'mno', 234, 987, 2020, 2 from dual union all
  5     select 'abc', 123, 765, 2020, 2 from dual union all
  6     select 'zyz', 124, 765, 2021, 1 from dual union all
  7     select 'abc', 123, 986, 2020, 2 from dual
  8    ),
  9  mapping (id, deptid) as
 10    (select 123, 765 from dual union all
 11     select 234, 987 from dual union all
 12     select 123, 986 from dual
 13    )

 14  select s.name, s.id, s.deptid, s.year, s.batch, 'YES' missing
 15  from student s
 16  where not exists (select null
 17                    from mapping m
 18                    where m.id = s.id
 19                      and m.deptid = s.deptid
 20                   )
 21  order by s.name;

NAM         ID     DEPTID       YEAR      BATCH MIS
--- ---------- ---------- ---------- ---------- ---
abc        123        987       2020          2 YES
zyz        124        765       2021          1 YES

SQL>

【讨论】:

非常感谢 不客气。

以上是关于找出oracle中具有不同列号的2个表之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

SQL合并两个具有不同列号的选择查询,同时删除重复项?

如何在火花中合并或连接具有不相等列号的数据框

如何在R中将2个具有不同行和列号的表组合在一起

Oracle不同数据库之间同步处理方案

比较 2 个表中的值并生成具有差异的新表

SQL 检索具有不同序列号的所有记录,在日期范围和计数之间,拒绝代码 = "Low Current"