【问题标题】:How to write select using two ids combination in Oracle 11g如何在 Oracle 11g 中使用两个 id 组合编写选择
【发布时间】:2013-08-13 15:23:13
【问题描述】:

我有 2 个表,这两个表的前两列是相同的,例如: Table_1 有 SSN 列和membershipId 列 Table_2 也有 SSN 和membershipId 列。它们的数据类型相同,但内容可能略有不同。 Table_1 可能具有 Table_2 中不存在的 SSN 和 membersId 组合。

我需要从 table_1 中选择 SSN 和membershipIds 的组合不在table_2 中的记录。这个select语句怎么写?我正在使用 Oracle 11g

所以如果 table_1 有 SSN = 111-123-2345 和membershipId = 00001234 的记录 该记录不能存在于表 2 中。

【问题讨论】:

  • 您并没有真正使用 SSN 作为这样的关键列,是吗?这存在一些严重的数据保护问题。

标签: sql oracle


【解决方案1】:

另一种可能是:

select * 
from Table_1 t1
where not exists 
  (
   select null
   from Table_2 t2
   where t2.SSN = t1.SSN 
     and t2.membershipId = t1.membershipId 
  )

在 Oracle 中你也可以直接使用 "NOT IN" ...

【讨论】:

  • 感谢您提供的代码示例。这对我来说更容易理解,即使它比减号语句更长。使用减号让我有点困惑,因为 table_1 的记录比 table_2 少。这可能不是问题,因为我得到了完全相同的结果,但是在语言方面,我更容易理解使用不存在。再次感谢所有帮助我解决问题的人!
【解决方案2】:

你可以使用减号

   SELECT SSN, membershipids
   FROM table_1
   MINUS
   SELECT SSN, membershipids
   FROM table_2

使用示例http://www.techonthenet.com/sql/minus.php

【讨论】:

  • 你会在 table_1 值上得到一个冗余的不同排序,所以 NOT EXISTS 在这里可能更合适。
猜你喜欢
  • 1970-01-01
  • 2018-02-11
  • 2022-01-15
  • 2015-10-01
  • 1970-01-01
  • 2016-04-28
  • 1970-01-01
  • 1970-01-01
  • 2016-07-31
相关资源
最近更新 更多