我正在寻找帮助,找出两个不同表中两列之间的不一致。
Table1有ColumnA
Table2有ColumnB
ColumnA和ColumnB具有在比较之前需要先删除的值,例如
ColumnA = TZ-ZA112
ColumnA = TZ-RT322
ColumnA = TZ-JKAAA
ColumnB = TZ-ZA112,-2
ColumnB = TZ-HHASS,-4
ColumnB = TZ-RT322,4-
基本上,我需要在比较之前删除TZ-(前三个)和##(后三个),然后我需要让查询吐出任一列中不存在的值。那么输出应该是什么
HHASS
JKAAA
老实说,我无法将SUBSTR和INSTR结合在一起,同时组合这些表来产生这个输出。
答案 0 :(得分:1)
假设您始终需要从columnA和B列中的第4个字符开始,并且需要获取npm i azure-cli -g
,直到azure storage cors set
-a "storage-account"
-k "storage-account-key"
--blob/table/queue/file
--cors "[{\"AllowedOrigins\":\"*\",\"AllowedMethods\":\"GET\",\"MaxAgeInSeconds\":\"86400\",\"AllowedHeaders\":\"*\",\"ExposedHeaders\":\"*\"}]"
字符,下面的代码才会起作用。
要获取不在columnA和columnB中的值,请使用substr
。对于不在columnB和columnA中的值,必须重复此操作。最后,执行,
以获得所需的结果。
minus
答案 1 :(得分:0)
根据此站点:http://www.dba-oracle.com/t_convert_set_to_join_sql_parameter.htm,用NOT IN子查询替换MINUS运算符的速度更快。我有兴趣看到这个证据。无论如何,我使用REGEXP_REPLACE使用它,因为我对嵌套的INSTR / SUBSTR调用过敏。
首先,我使用WITH子句设置数据Table1和Table2作为原始数据表(当然你已经有了这些,所以不需要这部分)。注意我在其中添加了一个带有嵌入式逗号的附加行,以满足OP的注释中的问题。然后,仍然使用WITH子句我从相同的数据中进行了T1_converted和T2_converted,但是从Table1 / ColumnA剥离了前3个字符,并且从Table2 / ColumnB剥离了前导3和尾随3。这样做可以减少底部实际选择中所需的REGEXP_REPLACE调用次数,并准备数据以使选择更容易理解。注 - 假设在两个表中将始终有3个前导字符和要在表2中剥离的3个尾随字符。如果这应该改变,正则表达式将不得不改变。
SQL> -- Simulates original table
SQL> with Table1(ColumnA) as (
2 select 'TZ-ZA112' from dual
3 union
4 select 'TZ-RT322' from dual
5 union
6 select 'TZ-JKAAA' from dual
7 ),
8 -- Simulates original table
9 Table2(ColumnB) as (
10 select 'TZ-ZA112,-2' from dual
11 union
12 select 'TZ-HHASS,-4' from dual
13 union
14 select 'TZ-RT322,4-' from dual
15 union
16 select 'TZ-R,T322,4-' from dual -- make sure commas are handled
17 ),
18 -- Strip leading 3 characters from table 1
19 T1_converted(ColA) as (
20 select regexp_replace(ColumnA, '^.{3}(.*)$', '\1') from Table1
21 ),
22 -- Strip leading and trailing 3 characters from table 2
23 T2_converted(ColB) as (
24 select regexp_replace(ColumnB, '^.{3}(.*).{3}$', '\1') from Table2
25 )
26 -- Get the differences
27 select ColA Unique
28 from T1_converted
29 where (ColA) not in
30 (select ColB from T2_converted)
31 union all
32 select ColB from T2_converted
33 where (ColB) not in
34 (select ColA from T1_converted);
输出:
Unique
-----------------------------------------------------------------------------
JKAAA
R,T322
HHASS
SQL>
我没有看到包含具有数据的表名(或缺少数据?)的值,但这不符合您的要求,所以我将把它作为练习留给您suss out