我有一个表格,其中包含两个STRING
值(所有单个字词)以及COUNT
每次出现的相应STRING
,例如
ID STR_1 COUNT_1 STR_2 COUNT_2
1 ORANGES 2 APPLES 10
2 APPLES 10 ORANGES 2
3 ORANGES 2 BANANAS 1
4 BANANAS 1 APPLES 10
5 BANANAS 1 ORANGES 2
N.B。 STR_1
被视为“主”值。此外,每个COUNT
值的STRING
在STR_1
和STR_2
之间以及行之间保持一致(例如ORANGES
将始终具有COUNT
} 2
)
我想要达到的目的是删除例如存在“对映体”的记录;在上述数据中,ID 2
将被视为ID 1
(ID 1.STR_1 = ID.2 STR_2
和ID 1.STR_2 = ID.2 STR_1
)的“对映体”,但ID 2
将被视为主要记录放弃ID 1
(因为COUNT
的{{1}}大于APPLES
的{{1}}) - 因此所需的输出将是;
COUNT
IF 存在一种情况,即不同ORANGES
匹配之间的ID STR_1 COUNT_1 STR_2 COUNT_2
2 APPLES 10 ORANGES 2
3 ORANGES 2 BANANAS 1
4 BANANAS 1 APPLES 10
值匹配,最长的COUNT
将被视为主导记录并保留例如;
STRINGS
输出所需的输出;
STRING
测试数据;
ID STR_1 COUNT_1 STR_2 COUNT_2
1 ORANGES 10 APPLES 10
2 APPLES 10 ORANGES 10
3 ORANGES 10 BANANAS 1
4 BANANAS 1 APPLES 10
5 BANANAS 1 ORANGES 10
非常感谢任何寻求上述解决方案的帮助。
非常感谢提前。
答案 0 :(得分:1)
使用反连接(not exists
运算符):
select *
from test_data t
where not exists (
select 1 from test_data t1
where t.str_1 = t1.str_2
and t.str_2 = t1.str_1
and (
t.count_1 < t1.count_1
or
t.count_1 = t1.count_1
and
length( t.str_1 ) < length( t1.str_1 )
)
)
order by id
如果对于给定的一对行,计数和长度都相等,则查询会选择两行。