【问题标题】:how to find the difference between two tables in oracle?oracle中如何找出两张表的区别?
【发布时间】:2018-03-11 12:59:10
【问题描述】:

我有两个名为A 和B 的表,其中大多数列不同,而公共列是name。现在我想根据公共字段找到表A中额外的记录 name。如何获得这些?

这里我们还要检查的是表B 中的一些名称在开头有'dummy_','Test_' 之类的词,我们必须对其进行修剪。比如说 表A 有name ='Div_text_col_tar' 和B 有name ='dummy_Div_text_col_tar',实际上是一样的。所以我们必须从名称的开头替换'dummy_'和'Test_'。怎么做?

我尝试如下所示,但没有任何运气:

SELECT *
FROM A t1
WHERE NOT EXISTS
  (SELECT 1
  FROM B t2
  WHERE t1.name = REGEXP_SUBSTR(t2.name,'[^-dummy_|-Test_]+',1,1)
  )
AND t1.status =100
AND t1.floor IN ('1','2','3')

【问题讨论】:

  • 样本数据和期望的结果会很有帮助。

标签: sql .net oracle


【解决方案1】:

我想我会去:

SELECT t1.*
FROM A t1
WHERE NOT EXISTS (SELECT 1
                  FROM B t2
                  WHERE t2.name IN (t1.name, 'dummy_' || t1.name, 'Test_' || t1.name)
                 ) AND
      t1.status = 100 AND
      t1.floor IN (1, 2, 3);  -- presumably, these are numbers, not strings

这似乎比使用正则表达式更简单、更容易理解。

【讨论】:

  • 鉴于问题提出的表的状态,我不会对任何列的数据类型做出任何假设:)
猜你喜欢
  • 2019-12-14
  • 1970-01-01
  • 2014-11-04
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
相关资源
最近更新 更多