我有两个名为A
和B
的表,其中大多数列不同,公共列为name
。现在我想基于公共字段找到表A
中的额外记录
name
。如何获得这些?
我们需要检查的另一件事是表B
中的一些名称在开头有'dummy_'
,'Test_'
这样的字,我们必须修剪。比如说
表A
表name ='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')
答案 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
这比使用正则表达式更简单,更容易理解。