mysql查询时如何去除重复数据

mysql查询时如何去除重复数据,第1张

MySQL 过滤重复数据

有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据。

如果你需要读取不重复的数据可以在 SELECT 语句中使用 DISTINCT 关键字来过滤重复数据。

from 树懒学堂- 一站式数据知识学习平台

你也可以使用 GROUP BY 来读取数据表中不重复的数据:

整个结果集:

SELECT  FROM 表

WHERE 班级 = @班级参数

把DropDownList里绑上班级,根据你下拉的结果,把班级传给整个结果集,用于过滤

SELECT DISTINCT 班级

FROM 表

这样可以取出不重复的班级记录

最后把DropDownList取出的班级值@班级参数,传给结果集,这样结果集就可以根据你下拉框选的班级,动态过滤结果了。

张三,男,110

张三,男,110

首先这样的数据

在数据库中是不允许存在的

因为没有意义

没有主键

你在数据库中删除

会出现错误

根据你的补充

你有主键

比如ID

你想不重复的取得

Name

+

Phone

字段

如果只需要这3列

select

name,gender,phone

from

table_1

group

by

name,gender,phone

如果不仅仅要这3列

而是和其他列一起显示

(注

只能取第一个主键内容了

)

select

min(id)

as

id

,name,gender,phone

from

table_1

group

byname,gender,phone

如果除了ID

还有其他列

就连接到上面的得到的这个表就好了

这应该是最简单的方法了

估计你不是只想过滤掉湖南省三个字吧,就是有湖北省武汉市,你也想把湖北省过滤掉的吧?

如果是这样的话你去看下SUBSTRING()这个函数,就是取字符串的字串。

原理是这样的,你首先找出字符串中第一个“省”出现的位置,把该位置后的字符串取出来就是你想要的了。

给你一个例子吧,就上面你那个湖南省的,查询语句可以这么写:

SELECT SUBSTRING('湖南省湘潭市湘乡市', CHARINDEX('省', '湖南省湘潭市湘乡市') + 1,

LEN('湖南省湘潭市湘乡市'))

输出:湘潭市雨湖区

希望能帮到你

(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):

ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表

(2) WHERE子句中的连接顺序.:

ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾

(3) SELECT子句中避免使用 ‘ ‘:

ORACLE在解析的过程中, 会将'' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间

(4) 减少访问数据库的次数:

ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等;

(5) 在SQLPlus , SQLForms和ProC中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 ,建议值为200

(6) 使用DECODE函数来减少处理时间:

使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表

(7) 整合简单,无关联的数据库访问:

如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系)

(8) 删除重复记录:

最高效的删除重复记录方法 ( 因为使用了ROWID)例子:

DELETE FROM EMP E WHERE EROWID > (SELECT MIN(XROWID)

FROM EMP X WHERE XEMP_NO = EEMP_NO);

(9) 用TRUNCATE替代DELETE:

当删除表中的记录时,在通常情况下, 回滚段(rollback segments ) 用来存放可以被恢复的信息 如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况) 而当运用TRUNCATE时, 回滚段不再存放任何可被恢复的信息当命令运行后,数据不能被恢复因此很少的资源被调用,执行时间也会很短 (译者按: TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML)

(10) 尽量多使用COMMIT:

只要有可能,在程序中尽量多使用COMMIT, 这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少:

COMMIT所释放的资源:

a 回滚段上用于恢复数据的信息

b 被程序语句获得的锁

c redo log buffer 中的空间

d ORACLE为管理上述3种资源中的内部花费

(11) 用Where子句替换HAVING子句:

SELECT distinct t2tid, FROM table1 t1 LEFT JOIN table2 t2 ON

t1tid=t2tid;

或者

SELECT FROM table1 t1 LEFT JOIN table2 t2 ON

t1tid=t2tid

group by t2tid

你试试看看好使不,,我也没试过

以上就是关于mysql查询时如何去除重复数据全部的内容,包括:mysql查询时如何去除重复数据、用SQL语句过滤数据、VB中如何过滤掉数据库中的重复数据,只显示一个等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/sjk/9813046.html

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

发表评论

登录后才能评论

评论列表(0条)

保存