MySQL根据两列进行去重

有一个表如下:
图片说明
想要的查询结果为:
图片说明
即根据num1和num2这两个字段进行去重,不论它们的先后顺序。比如:num1=111111,num2=123123和num1=123123,num2=111111就是重复的,去重并保留一条记录。

1

6个回答

这个是ID是自增序列的做法,有点复杂,如果你的ID是UUID的话这个方式还是有问题。

 SELECT
    * 
FROM
    tt 
WHERE
    ID NOT IN (
    SELECT
        * 
    FROM
        (
        SELECT
            t1.ID 
        FROM
            tt AS t1
            INNER JOIN tt AS t2 ON t1.a = t2.b 
            AND t1.b = t2.a 
            AND t1.ID != t2.ID 
        GROUP BY
            t1.id + t2.id 
        ) AS t 
    )

如果按照这个写法中途遇到了group by的错误执行下面语句

-- 修改mysql中的group by 要求查询字段全部在group by后的设置


set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

 set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

如果不是自增ID的话,我在想想还有什么别的写法

1
a200710716
B_mirror 十分感谢啊,这条语句确实可行,我能问下group by后面的t1.id+t2.id是什么意思吗,这个不理解。确实如果不是自增id的话就不行,这又是为什么呢?
10 个月之前 回复

select distinct a.* from 表 a where a.date = ( select max(b.date) from 表 b where b.name = a.name and b.code = a.code )

0
a200710716
B_mirror 这样子只能将重复的选出来,没有去重啊
10 个月之前 回复

你是要查询去重复吗?SELECT * FROM A WHERE A.num1 NOT IN (SELECT num2 FROM a);

0
a200710716
B_mirror 你这样子把所有重复的都去掉了,没有保留啊,重复的要保留一条。看上面的图,图一 表中有三条记录,第一条和第二条就是重复的,这两条只保留一条,然后去重后的结果就是图二的结果,只有两条记录。
10 个月之前 回复

先子查询自身关联,查询出两列交叉相同的数据ID,在查询不在这个ID集合中的便是去重的数据,不知能否满足你的需求

 SELECT
    * 
FROM
    tab 
WHERE
    ID NOT IN (
    SELECT
        t1.ID 
    FROM
        tab AS t1
        INNER JOIN tab AS t2 ON t1.a = t2.b 
        AND t1.num1 = t2.num2 
    AND t1.num2 != t2.num1 
    )

0

刚贴错了一点,好尴尬,哈哈哈

  SELECT
    * 
FROM
    tab 
WHERE
    ID NOT IN (
    SELECT
        t1.ID 
    FROM
        tab AS t1
        INNER JOIN tab AS t2 ON t1.ID ID != t2.ID 
        AND t1.num1 = t2.num2 
            AND t1.num2 = t2.num1 
    )
0
a200710716
B_mirror 交叉重复的数据中我还需要保留其中的一条记录,这个怎么做?你给的语句是把交叉重复的都去掉了。
10 个月之前 回复

select * from a where a.num1 in(select distinct a1.num1 from a1) and a.num2 not in(select distinct a1.num1 from a1)
先把第一列去重查出来,然后第一列的字段包含去重后的字段,第二列的字段不包含去重后的字段,就是你想要的不重复的


0
a200710716
B_mirror 你这条语句查询的结果只有第三条记录,前面两条都去掉了,我需要前面两条重复的记录保留其中的一条
10 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
mysql 针对多列去重
SELECTrnt.*, COUNT(rnDISTINCT t.user_name,rnt.insurant_mobilern)rnFROMrntb_user_insurants trnWHERErnt.user_id = 199rnGROUP BYrnt.user_name,rnt.insurant_mobilernrnrn注意加别名,不然报错,注意在where语句外面包装一下,再用group
根据两个字段去重SQL语句
delete from aop_app_ipmlinfo a where a.impl_id not inn(n select max(t.impl_id) c from aop_app_ipmlinfo t group by t.app_id,t.ability_idn)ps: max(t.impl_id) 也能替换为 min(t.impl_id)
Pandas 同元素多列去重
有一些问题可能会遇到同元素多列去重问题,下面介绍一种非常简单效率也很快的做法,用pandas来实现。rn首先我们看一下数据类型:rnG1 G2rna brnb arnc drnd crne frn对这样的两列数据进行同元素去重,最终得到结果为:rnG1 G2rna brnc drne frnrnrn代码如下:rnrn#-*- coding: utf-8 -*-rnrndata = {'G1':['
Mysql 多字段去重
使用group by去重nn现在有如下表nnnnid name agen1 张三 23n2 李四 34n3 张三 23n4 李四 32nn需求 : 按照name和age字段联合去重nnsql如下nnselect * from user group by n...
mysql根据某个字段去重
在有主键的情况下rnSELECT * FROM sa_request t WHERE t.logid IN (n SELECT MAX(logid) FROM sa_request GROUP BY caseidn);nrn或者效率高些的rnSELECT * FROM sa_request t WHERE EXISTS (n SELECT 1 FROM sa_request GROUP BY
MySQL根据两列去重
第一个问题:rn有id,name两列,先把两列合并成一列。rnset idname=CONCAT(id,name)。rn然后select distinct id,name 和 select distinct idname 的结果为什么不一致。rnrn第二个问题:rn本来我想把两列合并成一列来去重,但是由于上面的问题,失败了。rn所以请教一下有没有什么好的方法可以按照两列来去重。[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/11.gif][/img][img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/12.gif][/img]rn
Sql 求两列去重后的总数量
逻辑n先去分别去重2列(SrcIP, DstIP)的值n查询一列(SrcIP)不在另一列(DstIP)的所有数据ncount(SrcIP)是不在dstIP中的数据个数。n2列(SrcIP, DstIP)的数据相加。nSQLselect count(SrcIP)+(select count(DISTINCT(DstIP)) from netinfo) as co from n (select D
MySQL多字段去重
# 创建学生成绩表grade:n# grade表的字段说明:id表示学生编号,name表示学生姓名,gender表示学生性别,score表示学生分数。nncreate table grade(nid int,nname char(1),ngender char(1),nscore intn)engine myisam charset utf8;nn# 向学生表中插入数据:ninsert into...
SQL:两个字段的(顺序无关)去重
今天发现了一个顺序无关去重复的巧妙方法。mark一下。 n这个是比较冷的问题,如果tb1 有两个字段 A,B,如何用A,B 字段进行顺序无关去重? n什么是顺序无关?就是不区分AB两个字段的先后顺序。 n如: tbl1有三行记录,要求只保留(A, B)的唯一可能集合 n A B n 1 2 n 2 1 n 1 2 n 1. 常规去重比较简单:顺序相关 n select * f
linux awk 按多列 去重 来统计数据之妙用
rn这是我日常工作统计日志用到的,现记录下:rn比如有这样一个日志:rn rn需要统计push,的点击数量,按cookie去重,因为一个设备可能点击多次rn rn第一步,先看看这几列,打印出来看看,rnawk -F "," '{print $2" "$3" "$6" "$7" "$9}' pushLog.logrn rn rn第二步,按上面的几列去重rnawk -F "," '!a[$2
MySQL删除单列重复或多列同时重复值并保留一条
mysql删除重复字段并保留一条
SQL查询两列值相同,位置相反去重问题
一个表有两个字段,两行数据为【A,B】【B,A】,列值相同位置相反,如何将这两行去重为一行?nn nn之前业务碰到一种情况,两条设备检修对断面的影响有的是一个定值。但数据库字段两个顺序会影响联合主键的问题,如何将这样两条顺序相反的数据看成一类的呢?nn还想过将两条id相加,得到的和最为唯一标示。但是这个可能不同的数据组合但和是一样的。比如88+82,85+85等。nn nn解决方案nnSELECT...
pandas进行某列合并再去重统计demo
pandas是非常好用的python处理数据的工具,速度是原生函数的10倍不止:nn1、data = DataFrame([[],[],[]...]),此操作是把一个list变成dataformnn2、data[["列名"]]取出某一列nn3、data[1:5]取出某几行nn4、c1.columns=['18','40']更改列名(改为18,40) 或者  c1.rename(columns = ...
Oracle根据多列去重
(1)distinctrn关键词 distinct用于返回唯一不同的值,可作用于单列和多列rn但必须将其放在开头,否则会提示错误rnrn而若在其后添加多个变量名,则返回的将是这多个变量名不同时重复的列,因而使用distinct筛选某字段不重复记录时无法同时得到其他的信息。rn此时可以采用group by函数rn(2)group byrn与聚合函数联用可以在取多个字段的同时去重其中一个字段rn例如要显示的字段为A、...
Excel两列去重方法(一列中的内容在另一列中是否重复)
转:http://zhidao.baidu.com/question/126678139.htmlrn-------------------------------rn假设第一份数据在A列,第二份数据在B列,判断Brn列中数据是否与Arn列重复rnrn-----------------rn1.加辅助列C,公式如下:rn1.1rnC1中填写公式:=IF(COUNTIF(A:A,B1)>0,"重...
hive基于多列去重操作
文章目录解决思路例子rn解决思路rn一种解决思路是使用group by。即group by用于判断数据重复的多个字段,再使用:rnrncollect_set(非group by字段)[0]rnrn从group by获取的数据中随意取一个非group by字段。rn例子rn例如,有下表:rnrn我需要以前两列的字段作为判断重复的标准,即user_name和commentid字段。如若重复,其他列随机取字段值就行了。如下...
mysql查询根据部分字段去重
mysql有个关键字distinct用来去重的,但是使用时只能放在查询字段的最前边n如: SELECT DISTINCT user_id,age FROM t_user;n若不是放在最前边,如: SELECT user_id, DISTINCT age FROM t_user; nn是会报错的。nn那么如果我们只想根据age字段来去重,并且要查出user_id,就不能直接这样执行。需要
mysql如何去除两个字段数据相同的记录?
查询重复记录:rnSELECT t.id, t.item_idrnFROM eco_tb_item_info trnINNER JOIN (SELECT item_idrnFROM eco_tb_item_infornGROUP BY item_idrnHAVING COUNT(id) > 1) duprnON t.item_id = dup.item_idrnrn删除,只需要把你这张表当成两张表
Mysql查询去重语句
1、distinctnnnselect count(distinct CName) from Coursenselect count(CName) from (select distinct CName from Course) as tempnn2、group bynnnselect count(1) from Course group by CNamenn3、数据库内随机抽取几条数据nnnfr...
Python对多属性的重复数据去重
python中的pandas模块中对重复数据去重步骤:rn1)利用DataFrame中的duplicated方法返回一个布尔型的Series,显示各行是否有重复行,没有重复行显示为FALSE,有重复行显示为TRUE;rn2)再利用DataFrame中的drop_duplicates方法用于返回一个移除了重复行的DataFrame。rnrnrn注释:rn如果duplicated方法和drop_dup
Spark SQL 按照某个字段去重
/**n * 按照两个字段进行排重n * Created by princeping on 2017/8/8.n */nobject SQLDemo {n def main(args: Array[String]): Unit = {n val spark = SparkSession.builder.appName("SQLDemo").master("local").getOrC...
MySql数据库:数据查重、去重的实现
MySql数据库记录查重去重
T-SQL对多个字段去重并计数
定义和用法可以一同使用 DISTINCT 和 COUNT 关键词,来计算非重复结果的数目。语法SELECT COUNT(DISTINCT column(s)) FROM table例子注意:下面的例子仅适用于 ORACLE 和 Microsoft SQL server,不能用于 Microsoft Access。SELECT n COUNT(D...
Excel2016,根据列值使用VBA将两个表进行比对去重
使用VBA,根据列将两个表进行比对去重nn nn1、将某一单元格数据赋值至某个变量:a = Sheets(1).Range("K3")或nna = Worksheets("sheet1").Cells(3, 11).Valuenn2、输出变量值:MsgBox bnn nn3、对比两个变量是否相同的代码:nnIf a = b Thennn    MsgBox ("yes")nn    Elsenn ...
MySql实现根据某个条件去重求和
具体的可以看下  distinct 具体用法nn   nnn//第一图 直接查询出所有的idn SELECTn d.idn FROMn t_device dn LEFT JOIN t_device_collect_state a on d.id = a.device_collect_idn LEFT JOIN t_group b on d.group_id = b....
mysql分组后计算分组的组数和根据某个字段去重计数
计算分组的组数SELECT count(1) from (select COUNT(1) as sum FROM TM_APP_MAIN A INNER JOIN TM_APP_PRIM_APPLICANT_INFO B ON A.APP_NO= B.APP_NO LEFT JOIN TM_BLACK_LIST C on A.APP_NO= C.APP_NO where A.ORG = 99...
mysql去除多列组合重复(并添加组合唯一索引)
缘起nn由于起初mysql数据表设计考虑不周,导致后续表里出现重复数据,这里点重复是指多个列组合起来数据一样。现期望多个列组合数据表示点记录在数据表里唯一,结局办法就是加多列组合唯一索引。nnn 本文以col1, col2和col3三列组合为唯一索引。数据表名为table_namennn这时如果使用:nnalter table table_name add unique "uk_index" (...
mysql 统计数据字段去重
1:mysql 去重的正确节奏nnselect count(DISTINCT id) from table where id in ('1','2')nnn2:mysql 分批统计nnselect count(id) from table where id in ('1','2') group_by idn...
sql:查询多字段/多列时怎么去重
我们知道单个字段去重时应该这样rnSELECT DISTINCTrnidrnFROMrntablenamernrn若我们想查id、nickname、sex等多个字段的同时也想去重怎么办呢rnSELECT DISTINCTrnid,nickname,sexrnFROMrntablenamernrn这样去查是错误的rn因为是把id,nickname,sex视为一个整体来去重而不是仅依据id来去重rn比
Mysql 对多列进行排序
4.4.2 对多列进行排序rnhttp://book.51cto.com 2008-06-04 16:14 马军/李玉林等编著 电子工业出版社 我要评论(0)rnrn * 摘要:《SQL语言与数据库操作技术大全:基于SQL Server实现》第4章主要讲的是基本的查询,所谓查询就是让数据库服务器根据客户端的要求搜寻出用户所需要的信息资料,并按用户规定的格式进行整理后返回给客户端。本节...
使用awk对某列去重并且可保留其他列
同事说需要统计日志中按url的path去重之后的结果,结果中要保留参数。相同url不同参数的,只保留第一行。rnrn理论上各种命令都是流式处理,一行一行的处理。每道命令都相当于一个过滤器。比如你要按某列去重,则事先把数据cut到只剩你需要去重的这一列。对url中的path做sort+uniq。rnrn但是这样会导致参数都没了。所以不能用这个。rnrnrnrnrn最后成功的命令如下:rnrnrnrn
PostgreSQL使用distinct关键字给单独的几列去重
PostgreSQL使用distinct关键字给单独的几列去重nPostgreSQL去重问题一直困扰着我,distinct和group by远不如MySQL用起来随便,但是如果掌握了规律,还是和MySQL差不多的n主要介绍的是distinct关键字nnnselect distinct id,name,sex,age from studentnn假如有一张student表,字段如上图,我查询stud...
Python Dataframe ——指定多列去重、求差集
1)去重rn指定多列去重,这是在dataframe没有独一无二的字段作为PK(主键)时,需要指定多个字段一起作为该行的PK,在这种情况下对整体数据进行去重。rnAttention:主要用到了drop_duplicates方法,并设置参数subset为多个字段名构成的数组。rnrnrn具体代码如下:rn n>>>import pandas as pd n>>>data={'state':[1,1,
MySql最便捷的去重查询
select DISTINCT(col_name) from table_name;rn DISTINCT将返回col_name字段唯一不同的值。
Oracle根据某列去掉重复行
select u1.* from   scm_swccwtd4 u1 rnrnwhere u1.rowid =(select min(u2.rowid) from  scm_swccwtd4 u2 where u1.suoshuzuzhijigou = u2.suoshuzuzhijigou )  rnrnrnrnrn说明:根据所属组织机构去掉重复行rnrnrnrnrn去重复前:rnrnselec
Spark根据key,按照一定条件对数据去重
使用groupByKey和reduceByKey,将数据按照某一特定条件去重
mysql 想获取所有字段信息,并且其中一个字段去重语句
select * from 表名 where 主键 in(select max(主键) from 表名 group by 要去重的字段 )
SQL根据某列或几列分组去重——row_number() over(partition by)的用法
SQL中的分组去重——row_number() over(partition by)
Mysql 数据记录去重后按字段排序
实现效果:去重—取最新的—排序 n例子 : 按用户ID获取历史记录中某个人的记录,要求非重复的且每条只获取最新的,同时按添加时间倒序排列的n实现 : nSELECT * nFROM ( n SELECT * n FROM historys n WHERE types_id=1 n ORDER BY `created` DESC n) AS B nGROUP BY B.data_idnorder by B.created DESC
spark rdd根据某一列去重
比如一个rdd有两列 name agernname有重复的,现在要根据name来去重rnm = rdd.map(lambda r:(r[0],r))nr = m.reduceByKey(lambda x,y:x)首先先生成一个以该列为标准去重的key,该行为value,然后调用reduceByKey就可以啦
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 视频进行大数据处理 怎么进行区块链