MySQL过滤部分字段重复的数据

MySQL过滤部分字段重复的数据,第1张

select

distinct可以去掉重复记录。

disctinct将重复的记录忽略,但它忽略的是完全一致的重复记录,而不是其中某个字段重复的记录,或者说,distinct查询一个字段时好使,多个字段就不好使。

所以用聚合函数和group

by实现

注意:group

by只能跟聚合函数搭配使用

例表

ID

username

password

TRDESC

1

A

abcdef

QR

2

A

abcdef

W34

3

A

bbbbbb

AD

4

B

aaaaaa

asdf

查询username和password组合起来的条件不能重复的查询结果(这个都能重复,不能不说这是个烂摊子)

select

*

from

mytable

where

ID

in(select

max(ID)

from

mytable

group

by

username,password)

当username和password重复时,取ID最小的记录:

select

*

from

mytable

where

ID

in(select

min(ID)

from

mytable

a

group

by

username,password)

场景:表中包含有group_id,worker_id,status字段,查询这三个字段是否存在重复的数据。

查找某个人在某个班组内存在多个status为0的数据

查找某个人在某个班组内存在多个status为0的数据,将最小的id选出来

查找某个人在某个班组内存在多个status为0的数据,将最小的id选出来,并设置status为1

将查询查询结果作为where in的条件,需要select的结果再通过一个中间表select多一次,否则会报You can't specify target table for update in FROM clause。

其实这个写法挺经典的

delete FROM tablename WHERE id IN (

SELECT id FROM (

SELECT count(1) as cnt,id FROM tablename GROUP BY a having cnt >1) AS a )

tablename 是你这个表的表名,a代表你要去重的那个字段,就这样一直执行这个语句,直到删完为止,也可以像楼上所说的,用一个表过度下


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7128328.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-02
下一篇 2023-04-02

发表评论

登录后才能评论

评论列表(0条)

保存