数据库查询结果处理:去除两个字段交换后相同的数据 5C

两个表均有AB字段
select A,B,A||B from 表1
union all
select A,B,A||B from 表2
查询结果是这样:
A B 拼接字段
a b ab
a c ac
a d ad
c d cd
c a ca
b a ba

目的就是要去除像最后两条这样的数据
也就是认为A字段和B字段数据交换之后和他本身是一个数据,即ab和ba是同一个数据
oracle数据库,求解决方法

5个回答

 select * from SELECT 拼接字段 FROM 表 ORDER BY CASE WHEN CAST(PARSENAME(拼接字段,2) AS int) IS NULL THEN 1 ELSE 0 END,CAST(PARSENAME(拼接字段,2) AS int), PARSENAME(拼接字段,2) group by 拼接字段
q1425603211
末世旅行 能再具体一点么,谢谢
大约 2 年之前 回复

SELECT A,B,CONCAT(A,B) 拼接字段 FROM 表1 UNION ALL SELECT A,B,CONCAT(A,B) 拼接字段 FROM 表2 GROUP BY CONCAT(A,B) || CONCAT(B,A)

SELECT a,b,CONCAT(a,b) from A AS a
WHERE  CONCAT(a,b) not in (SELECT CONCAT(a1.b,a1.a) FROM A as a2)

这个是简单的查询一张表A里面的去除颠倒重复的,你是两张表,在union一个一样语法表B的操作就可以了

it_zhangwei
路漫漫兮其修远兮 没有简单的方法,mysql没有获取varchar字符串的ASCII码,不然可以将ASCII相加,去重相等的ASCII码
大约 2 年之前 回复
q1425603211
末世旅行 回复路漫漫兮其修远兮: 都是varchar
大约 2 年之前 回复
it_zhangwei
路漫漫兮其修远兮 如果你的数据库表字段只是char,完全可以使用ASCII来解决,如果字段是varchar的话还不好弄
大约 2 年之前 回复
q1425603211
末世旅行 如果数据量大的话,not in会不会影响效率啊
大约 2 年之前 回复

如果你用的是oracle的话,oracle有一个reverse() 字符串反转函数, select reverse('ab') from dual; 结果是: ba 你可以思考下用这个函数来进行筛选.
最无脑的是,你把每行数据的A,B列组合以及他的reverse()后的组合放到一起,然后select distinct..比如像下面这样:
select distinct t.* from (
select A||B from 表1
union all
select reverse(A||B) from 表1
union all
select A||B from 表2
union all
select reverse(A||B) from 表2
) t

用union all,而不是子语句的话,虽然看起来写得很臃肿,但是效率不至于差太多.

需要关注的是,reverse() 函数不支持中文的反转.

如果是用的其他数据库,当我没说.不过其实也可以自己写一个反转的函数来实现.反转的函数写法就是把字符串转成字符,然后倒过来输出.

with tt as (
select A,B,A||B as C from t0 a where not exists (select 1 from t0 b where b.A||b.B=a.B||a.A)
union all
select A,B,A||B as C from t1 a where not exists (select 1 from t1 b where b.A||b.B=a.B||a.A))
select * from tt
minus
select * from tt group by A,B,C having count(1)>1
minus
select * from (select A,B,A||B as C from t0 union all select B,A,B||A as C from t1)
group by A,B,C having count(1)>1
minus
select * from (select B,A,B||A as C from t0 union all select A,B,A||B as C from t1)
group by A,B,C having count(1)>1

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

16
怎么在一个项目中,进行多种数据库数据的交互
5
C#项目中做一个类似日志的功能,就是将用户的增删改操作记录下来存入数据库!详细如下:
3
<c:if>标签 判断数据库取出的字段tine 和当前的时间先后 怎么写
8
数据库表字段设计小白问题
6
把一个数据库中的数据 大批量更新到另一个数据库,
7
数据库如何单表查询得到两个相关联表的所有数据
8
TP5当中我的数据库表里有这个字段名,为什么还是找不到?
1
delphi adoquery查询数据库,日期字段的,怎么查询当日的和昨天的?
9
数据库多个表有重复的字段
2
通过存储过程,实现在多个数据库中查询相同表的字段,返回数据库名
1
flask框架中sqlalchemy,对数据库里的表增加字段
4
SQL查询两个表中相同字段值的集合并且去重
1
求ACCESS VBA数据库编程代码:在窗体中进入某个字段
0
求ACCESS VBA数据库编程代码,在窗体中进入某个字段,出现一个查询向导
0
窗体中进入某个字段就打开一个查询向导,查询向导的第二列按照某个值筛选
1
TIBCO Spotfire数据分析调试:引入的两个表的相同列的筛选器怎么同步
5
传入数据类型是List<String> 数据库的字段类型应该是什么 SQL server
1
怎样实现springboot项目:一个实体固定属性存在关系数据库,可扩展属性存在mongdb中
2
数据库中的一个字段数据是另一张表的主键
2
关于SQL数据库的问题,怎样获得字段的信息