MySQL根据两列进行去重

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

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的话,我在想想还有什么别的写法

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

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

a200710716
B_mirror 这样子只能将重复的选出来,没有去重啊
大约一年之前 回复

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

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

先子查询自身关联,查询出两列交叉相同的数据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 
    )

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

  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 
    )
a200710716
B_mirror 交叉重复的数据中我还需要保留其中的一条记录,这个怎么做?你给的语句是把交叉重复的都去掉了。
大约一年之前 回复

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


a200710716
B_mirror 你这条语句查询的结果只有第三条记录,前面两条都去掉了,我需要前面两条重复的记录保留其中的一条
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
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语句
例如 rn id, begin , end msgrn 1 2 4 Arn 2 2 4 Brnrn 根据 begin 和end 相同,取其中一条rnrnrn建表SQL语句rnrnrnDROP TABLE IF EXISTS `test`;rnCREATE TABLE `test` (rn `begin` int(11) DEFAULT NULL,rn `end` int(11) DEFAULT NULL,rn `msg` int(11) DEFAULT NULL,rn `id` int(11) NOT NULL AUTO_INCREMENT,rn PRIMARY KEY (`id`)rn) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;rnrn-- ----------------------------rn-- Records of testrn-- ----------------------------rnINSERT INTO `test` VALUES ('1', '1', '2', '1');rnINSERT INTO `test` VALUES ('1', '1', '3', '2');rnINSERT INTO `test` VALUES ('2', '2', '31', '3');rnINSERT INTO `test` VALUES ('3', '3', '2', '4');rnINSERT INTO `test` VALUES ('4', '4', '3', '5');rnINSERT INTO `test` VALUES ('5', '5', '5', '6');rnrnrn
mysql根据某个字段去重
在有主键的情况下 SELECT * FROM sa_request t WHERE t.logid IN ( SELECT MAX(logid) FROM sa_request GROUP BY caseid ); 或者效率高些的 SELECT * FROM sa_request t WHERE EXISTS ( SELECT 1 FROM sa_request GROUP BY
oracle去重,根据列去重,字段去重。
distinct去重在用in实在是不好用啊,速度堪忧! 根据字段去重,。 根据 id和sex 字段去除重复的行,并获取其它的列: select id,name,sex from( select a.*,row_number() over(partition by a.id,a.sex order by name) su from test a ) where su=1 其中,partition b...
JSON如何根据value进行去重
我通过调用接口获得返回的JSON数据是这种格式:rn[code=java]rnrn rn"ksmc" : "外科",rn"zsmc" : "肝胆外科门诊",rn"szwz" : "二楼"rn rn rn"ksmc" : "外科",rn"zsmc" : "血管外科门诊",rn"szwz" : "三楼"rn rnrn[/code]rn但是我想在页面展示的是所有的科室名称(ksmc),点击某一个科室显示该科室所有的诊所名称(zsmc)。现在我的思路是这样:rn定义一个JSON,分别有ksmc,zsmc节点。遍历获得的数据,判断科室名称的值是否存在,如果不存在,将ksmc和zsmc信息添加到JSON字符串中,如果该科室名称存在,只提取zsmc节点信息以追加的形式添加到ksmc为该科室名称的JSON信息中。不知道怎么实现,各位有没有什么建议或者更好的方法吗?Java代码或者JS都行。
jsonArray 根据key 进行排序 去重
function uniqueArray(array, key){     var result = [array[0]];     for(var i = 1; i         var item = array[i];         var repeat = false;         for (var j = 0; j             if (item[key]
MySql实现根据某个条件去重求和
具体的可以看下  distinct 具体用法     //第一图 直接查询出所有的id SELECT d.id FROM t_device d LEFT JOIN t_device_collect_state a on d.id = a.device_collect_id LEFT JOIN t_group b on d.group_id = b....
mysql查询根据部分字段去重
https://blog.csdn.net/maoyuanming0806/article/details/77950392
mysql 去重
我发现了mysql一个关键字很有用。 加索引时候带上 ingore 则在在建立主键或索引时候将重复行删除。   alert ingore table ...
mysql去重
    table  id name  1 a  2 b  3 c  4 c  5 b   select *, count(distinct name) from table group by name 结果:   id name count(distinct name)  1 a 1  2 b 1  3 c 1   或则 group_concat(distinct name)配合g...
Mysql去重
set SQL_SAFE_UPDATES = 1; delete from moose.company_company where name in (select name from (select name from moose.company_company group by name having count(name)>1) as tmp1) and id not in (s...
MYSQL去重
--去重(4月份)delete    t_ded5_paymentinfos as info from t_ded5_paymentinfos as  info,(select id as id from t_ded5_paymentinfos where  mobile in (select a.mobile  as mobilea  from t_ded5_paymentinfos  a wh...
Oracle根据多列去重
(1)distinct 关键词 distinct用于返回唯一不同的值,可作用于单列和多列 但必须将其放在开头,否则会提示错误 而若在其后添加多个变量名,则返回的将是这多个变量名不同时重复的列,因而使用distinct筛选某字段不重复记录时无法同时得到其他的信息。 此时可以采用group by函数 (2)group by 与聚合函数联用可以在取多个字段的同时去重其中一个字段 例如要显示的字段为A、...
Sql 求两列去重后的总数量
逻辑 先去分别去重2列(SrcIP, DstIP)的值 查询一列(SrcIP)不在另一列(DstIP)的所有数据 count(SrcIP)是不在dstIP中的数据个数。 2列(SrcIP, DstIP)的数据相加。 SQLselect count(SrcIP)+(select count(DISTINCT(DstIP)) from netinfo) as co from (select D
mysql数据库查询将两列数据一列去重,一列去重后合并
goodsno colorrn A 红,黄rn B 红,蓝,绿rn B 红,蓝rn C 红,黄rn C 红,绿rn D 绿,黄,蓝rn D 红,绿,蓝rn D 红,黄,绿rnrn查询结果rngoodsno colorrn A 红,黄rn B 红,蓝,绿rn C 红,黄,绿rn D 红,绿,黄,蓝
mysql两列求差
mysql中有没有求两列差的函数?直接相减么?还有若是将求差后的数进行排序 是不是就不会用到索引了??rnmysql> select * from test;rn+------+-----+------+rn| id | idd | name |rn+------+-----+------+rn| 1 | 200 | | rn| 2 | 30 | | rn| 3 | 40 | | rn| 4 | 50 | | rn| 18| 2 | | rn| 20 | 8 | | rn+------+-----+------+rn6 rows in set (0.01 sec)rn要求是:求idd-id的值并按idd-id倒序排序,取最大值。
sql根据两列商排序?
表tb(id,score,scorecount)都是int型rn现在要根据平均分来排序score/scorecount发现商都取整了,结构排序不正确rnselect * from tb oreder by score/scorecount desc
mysql求两列差值。。。
SELECT container_code,nCOUNT(container_code) as num ,ncount(CASE WHEN circulate_state IN(0,1) THEN container_code ELSE NULL END) as actualNumnFROM t_circulate_historynGROUP BYncontainer_coden要统计后的列actualNum 和 num的差异列differentNum,直接(actualNum - num)as differentNum不行。应该怎么写?
mysql数据交换两列的数据
由于录入数据时有两列的数据混了,需要将个别行的记录中的两列值互换位置修复数据,比如以下对user_id为b856303e2f364558a81bb9575aed1e3c的列进行数据修复 update tc_rbac_user a, tc_rbac_user b set a.real_name=b.account_name,a.account_name=b.real_name where a.us...
Mysql交换两列的值
创建一个测试的表create table test_swap(x char(10), y char(10));插入几条数据insert into test_swap values('x1', 'y1'), ('x2', 'y2'), ('x3', null), (null, 'y4');看一下现在表的样子select * from test_swap;输出+------+------+ | x
Mysql两列值互换
如图,表中有两列值,现在要把两列的值做交换,怎么写SQL? 第一印象:扩展出来一列:cc,然后将bc值给cc。然后ac再更新给bc;然后cc更新到ac;然后删除cc列。 如此一来,太麻烦了。 那么一条SQL怎么改呢?update tb set ac=bc,bc=ac .这样?你会发现两值变成了一样的,失败!!!为啥呢? 如下,执行ac=bc,第一条ba值更新给了ac,此时ac和bc的值...
通过去重进行数据清洗
数据准备 这里的数据是使用 apply进行数据处理 中的结果。 Seqno列去重 查看Seqno列都有哪些值 这是去除重复后,这一列中都包含的值。 duplicated方法 duplicated用于从上到下比较指定某一列的值,当这个值第一次出现时,返回False,当这个值和上一个比一样时,返回True 通过这个方法就可以查看到这一列中重复的情...
求教高手-根据两列的时间列进行统一[倒序]排序
表中分别有如下所示4个列,其中DialogueTime可能为NULL,ComeTimeC也可能为NULL。但是两列不可能同时为NULL。rn要求:DialogueTime若不为NULL,则取DialogueTime进行排序,无视ComeTimeC。rn 当DialogueTime为NULL时,则取ComeTimeC排序rn[code=HTML]rnID NAME DialogueTime ComeTimeCrn1 小黑 2012-02-18 08:33:39 2012-02-25 23:57:39rn2 小红 NULL 2015-03-18 08:33:39rn3 小白 2014-03-18 08:33:39 2010-03-18 08:33:39rn4 小青 2012-03-18 08:33:39 NULLrn5 小紫 NULL 2010-03-18 08:33:39rn[/code]rnrn我想要的输出结果为(注:我要的是倒序排列,既日期大的显示在前面)->rn[code=HTML]rnID NAME DialogueTime ComeTimeCrn2 小红 NULL 2015-03-18 08:33:39rn3 小白 2014-03-18 08:33:39 2010-03-18 08:33:39rn4 小青 2012-03-18 08:33:39 NULLrn5 小紫 NULL 2010-03-18 08:33:39rn1 小黑 2012-02-18 08:33:39 2012-02-25 23:57:39rn[/code]rnrnrn希望高手指点。。。
针对文章内容进行去重
最近公司项目抓取新闻板块内容,但是多个网站之间,重复新闻的概率很高(因为大多数新闻网站的内容都是互相爬取的),所以我自己想了一个针对内容的去重方法。   大概思路是: 取文章当中最长的3句话(当然这个值可以自己随意指定),默认只接收列表,然后进行hash,把hash值存储在redis中,因为相同的内容生成hash值是一样,其实去重原理就跟scrapy-redis很类似…   具体实现代
对象数组根据某个属性去重
let data = [ {id:1,name:'obj'}, {id:3,name:'string'}, {id:2,name:'arr'}, {id:1,name:'num'} ]; let hash = {}; data = data.reduce(function(arr, current) { hash[current.id] ? '' : ha...
List<T> 根据属性去重
/** * list去重复(深) 并根据字段进行排序 */ public static &amp;lt;T&amp;gt; ArrayList&amp;lt;T&amp;gt; deduplicate(List&amp;lt;T&amp;gt; list, String filedName) { Set&amp;lt;T&amp;gt; set = new TreeSet&amp;lt;&amp;gt;(new Compa...
数组去重,根据对象属性去重
var arry=[{   name:"zhangsan",   age:12 },{   name:"zhangsan",   age:12 },{   name:"lisi",   age:12 },{   name:"wangwu",   age:12 }] var arry4=[] var hash={} for(let i=0;i   let da
java8根据某个属性去重
public static &amp;lt;T&amp;gt; Predicate&amp;lt;T&amp;gt; distinctByKey(Function&amp;lt;? super T, Object&amp;gt; keyExtractor) { Map&amp;lt;Object, Boolean&amp;gt; seen = new ConcurrentHashMap&amp;lt;&amp;gt;(); return t -&amp;gt; se...
java8根据对象属性去重
members.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()-&amp;gt;newTreeSet&amp;lt;&amp;gt;(Comparator.comparing(UploadMemberListReqDTO::getMobile))), ArrayList::new))
shell脚本根据某一列去重
sort -t $'\t' -k 3 -u test-t 指定分隔符为‘\t’ -k 指定第三列 -u 排序同时去重
mysql根据两列查询 一个数值是否在该范围内
[img=https://img-bbs.csdn.net/upload/201603/21/1458543386_248295.png][/img]rn根据min_quality,max_quality字段查询 比如我现在有一个变量的值为30,查询出来会有2条,变量值为600则查询出来是0条.rn根据两列查询 一个数值是否在该范围内
MYSQL交换两列+根据表1关联更新表2
update test.n s1 LEFT JOIN test.n s2 on s1.id=s2.id set s1.`name`=s2.t,s1.t=s2.`name` where s2.t is not null 更简单的方法是用中间列暂存: update temp.s set tem=a,a=b,b=tem 关联更新与此类似: update test.n s1 LEFT JO
MySQL单列去重
在平时开发中,我们会碰到对表的某一列数据去重的需求场景,如下student表 建表语句如下 CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(10) NOT NULL, `age` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=In...
mysql常用去重操作
去除edu_records表中重复member_id的记录,只保存最新的教育记录。(select rr.id edu_id,member_id fromedu_records rr where not exists(select 1 from edu_records where rr.member_id = member_id and rr.id&amp;lt;id))r...
MySql去重--提取
先叙述问题:rn有一张表data_user,里面存储的有用信息为mobile--手机号码,Level--用户等级rn由于产品设计的特殊性,导致用户可以订购不同的业务,例如手机号码13800138000订购了付费会员,免费会员,短信笑话,彩信会刊等业务rn现在要对订购了某一个业务的手机号码进行短信推广,但是用户订购业务过多,一个业务发送了,那么其他的业务就不能再发推广短信rn例如:手机号码13800138000订购了付费会员,免费会员,短信笑话,彩信会刊业务,我现在要给付费会员中订购了彩信会刊业务的手机号码发送属于付费彩信会刊的彩信,这里要有13800138000这个手机号码;rn我还要给免费会员中订购了彩信会刊业务的手机发送属于免费彩信会刊的彩信,这里就不能有13800138000这个手机号码了.按照上面的逻辑,我应该怎样操作?rn我新建了一张表,data_user_tmp.然后select insert到新表了,然后就迷茫了...rn
mysql多字段查询去重
当数据表有主键时,使用group by 获取相同字段的最大主键即可,code如下: SELECT rn.* FROM table_name rn WHERE rn.id IN ( SELECT MAX(r.id) from table r GROUP BY a,b,c,d ) 其中id为表table的主键,a,b,c,d为同时相同时去重的字段。 当数据表没有主键时,需要首先加上主键,使...
mysql 针对多列去重
SELECT t.*, COUNT( DISTINCT t.user_name, t.insurant_mobile ) FROM tb_user_insurants t WHERE t.user_id = 199 GROUP BY t.user_name, t.insurant_mobile 注意加别名,不然报错,注意在where语句外面包装一下,再用group
MySQL多字段去重
# 创建学生成绩表grade: # grade表的字段说明:id表示学生编号,name表示学生姓名,gender表示学生性别,score表示学生分数。 create table grade( id int, name char(1), gender char(1), score int )engine myisam charset utf8; # 向学生表中插入数据: insert into...
mongoDB及mysql的去重语句
最近使用mongoDB用到数据去重,自己学习了一下,记录下结果。 1.mongoDB可视化工具:    使用mongoDB的可视化工具robo 3T,选择需要去重的表,例如:  去重语句如下: //后的内容为注解,使用时删除 db.getCollection('soft_patent').aggregate( { $group:{ '_id':...
mysql 如何去重
  sql代码: 去除重复: delete FROM test where id NOT in( select id FROM tmp ) create table tmp (select id FROM test GROUP BY `name` ) tmp是创建的临时表,不需要提前创建,直接写接好, 为什么要创建临时表,看下面: 直接写会报错 :   delet...
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池