mysql多列去重查询_sql重复记录的查询和去重(单多列)

本文介绍了多种在MySQL中进行多列去重查询的方法,包括使用DELETE语句保留rowid最小的记录、通过创建临时表删表再重建、以及利用部分字段定义重复并保留第一条记录等策略。同时,提到了在查询时遇到的where子句语法问题。
摘要由CSDN通过智能技术生成

2、删除表中多余的重复记录(多个字段),只留有rowid最小的记录

delete from vitae a

where (a.peopleId,a.seq) in (select peopleId,seq from vitae

group by peopleId,seq having count(*) > 1)

and rowid not in (select min(rowid) from vitae group by

peopleId,seq having count(*)>1)

3、删表再重建的方式,快糙猛,但可能中断业务的方式去重:

select distinct * into #Tmp from tableName

drop table tableName

select * into tableName from #Tmp

drop

table #Tmp

4、存储过程方式

暂略

*********************************************查询重复***************************************

2、部分字段来界定是否重复,比如名字,这类重复问题通常要求保留重复记录中的第一条记录

假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集

select identity(int,1,1) as autoID, * into #Tmp from

tableName

select min(autoID) as autoID into #Tmp2 from #Tmp group by

Name,autoID

select * from #Tmp where autoID in(select autoID from #tmp2)

最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

3、查找表中多余的重复记录(多个字段)

select * from vitae a

where (a.peopleId,a.seq) in (select peopleId,seq from vitae group

by peopleId,seq having count(*) > 1) 运行会产生问题,where(a.peopleId,a.seq)这样的写发是通不过的???!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 Slick 框架处理多个 left join 查询时,要根据某个字段去重 MySQL 中的数据,可以使用 Slick 的 `groupBy` 和 `map` 方法来实现。 假设我们有三个表:`table1`、`table2` 和 `table3`。我们想要根据 `table1` 的某个字段去重查询结果,可以按照以下步骤操作: 1. 定义 Slick 表映射: ```scala import slick.jdbc.MySQLProfile.api._ case class Table1(id: Int, field: String) case class Table2(id: Int, table1Id: Int, field: String) case class Table3(id: Int, table1Id: Int, field: String) class Table1Table(tag: Tag) extends Table[Table1](tag, "table1") { def id = column[Int]("id", O.PrimaryKey) def field = column[String]("field") def * = (id, field) <> (Table1.tupled, Table1.unapply) } class Table2Table(tag: Tag) extends Table[Table2](tag, "table2") { def id = column[Int]("id", O.PrimaryKey) def table1Id = column[Int]("table1_id") def field = column[String]("field") def * = (id, table1Id, field) <> (Table2.tupled, Table2.unapply) } class Table3Table(tag: Tag) extends Table[Table3](tag, "table3") { def id = column[Int]("id", O.PrimaryKey) def table1Id = column[Int]("table1_id") def field = column[String]("field") def * = (id, table1Id, field) <> (Table3.tupled, Table3.unapply) } val table1Query = TableQuery[Table1Table] val table2Query = TableQuery[Table2Table] val table3Query = TableQuery[Table3Table] ``` 2. 执行查询去重: ```scala val distinctQuery = table1Query .join(table2Query).on(_.id === _.table1Id) .join(table3Query).on(_._1.id === _.table1Id) .groupBy(_._1._1) .map { case (table1, _) => table1 } val result = db.run(distinctQuery.result) ``` 在上述代码中,我们将三个表进行了 left join 操作,并使用 `groupBy` 方法根据 `table1` 进行分组。然后,使用 `map` 方法选择出每个分组的第一个元素 `table1`,即去重后的结果。 请根据你的实际表结构和字段名修改代码中的表映射和查询条件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值