如何在oracle中找到两个表之间的区别?

时间:2018-03-11 12:59:11

标签: sql .net oracle

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

我们需要检查的另一件事是表B中的一些名称在开头有'dummy_''Test_'这样的字,我们必须修剪。比如说 表Aname ='Div_text_col_tar'B表示name ='dummy_Div_text_col_tar'实际上相同。所以我们必须更换“假_ _”和'测试_'从名字的开头。怎么做?

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

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')

1 个答案:

答案 0 :(得分: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

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