MYSQL 多表 条件多LIKE 并且是OR 链接, 出来好多重复数据,为什么啊?

MYSQL 多表 条件多LIKE 并且是OR 链接, 出来好多重复数据,为什么啊?,第1张

MYSQL多表条件多LIKE 并且是OR 链接,出来好多重复数据是设置错误造成的,解决方法为:

1、先看下我们的表数据,有一些数据是重复的。

2、要查找重复数据,我们可以使用mysql里的having语句,如图。

3、执行这个语句后,我们可以看到现在的结果里显示的就是表中重复数据的字段

4、要删除这些重复的数据,我们找出这些数据的ID,在select语句里,添加id字段,使用max函数,可以得到重复数据最后面的id。

5、执行结果如图,得到重复数据的id为8和9。

6、这样我们就可以使用delete语句来删除这二个id的数据了。

7、然后在外边添加一个delete语句就行了,详细代码如图。

实现方式如下:

  Dim cnn As Object, rs As Object, SQL$, i&, s$

    Set cnn = CreateObject("ADODB.Connection")

    cnn.Open "Provider=Microsoft.Jet.Oledb.4.0data Source=" & ThisWorkbook.Path & "\排课数据.mdb"

    SQL = "Select 星期&节&班级,count(星期&节&班级) from 排课 where 星期 is not null group by 星期&节&班级 having count(星期&节&班级)>1"

    Set rs = CreateObject("ADODB.Recordset")

    rs.Open SQL, cnn, 1, 3

    If rs.RecordCount Then

        For i = 1 To rs.RecordCount

            s = s & vbCrLf & "星期" & rs.Fields(0) & "班,重复次数:" & rs.Fields(1)

            rs.MoveNext

        Next

        MsgBox "有" & rs.RecordCount & "条记录重复:" & s

    Else

        MsgBox "没有发现重复记录"

    End If

    rs.Close

    cnn.Close

    Set rs = Nothing

    Set cnn = Nothing

End Sub

1。删除全部重复记录(慎用) 

Delete表Where重复字段In(Select重复字段From表GroupBy重复字段HavingCount(*)>1)

2。保留一条(这个应该是大多数人所需要的^_^)

DeleteHZTWhereIDNotIn(SelectMax(ID)FromHZTGroupByTitle)

注:此处保留ID最大一条记录

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

select*fromvitaea

where(a.peopleId,a.seq)in(selectpeopleId,seqfromvitaegroupbypeopleId,seqhavingcount(*)>1)

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

deletefromvitaea

where(a.peopleId,a.seq)in(selectpeopleId,seqfromvitaegroupbypeopleId,seqhavingcount(*)>1)

androwidnotin(selectmin(rowid)fromvitaegroupbypeopleId,seqhavingcount(*)>1)

select testid,count(1) from testtable group by testid having count(1)>1

count(1)就是重复在数量

如何查询重复的数据

select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) >1

PS:将上面的>号改为=号就可以查询出没有重复的数据了。

Oracle删除重复数据的SQL(删除所有):

删除重复数据的基本结构写法:

想要删除这些重复的数据,可以使用下面语句进行删除

delete from 表名 a where 字段1,字段2 in

(select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) >1)

上面的SQL注意:语句非常简单,就是将查询到的数据删除掉。不过这种删除执行的效率非常低,对于大数据量来说,可能会将数据库吊死。

建议先将查询到的重复的数据插入到一个临时表中,然后对进行删除,这样,执行删除的时候就不用再进行一次查询了。如下:

CREATE TABLE 临时表 AS  (select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) >1)

上面这句话就是建立了临时表,并将查询到的数据插入其中。

下面就可以进行这样的删除 *** 作了:

delete from 表名 a where 字段1,字段2 in (select 字段1,字段2 from 临时表)


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

原文地址: http://outofmemory.cn/sjk/9974501.html

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

发表评论

登录后才能评论

评论列表(0条)

保存