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中如何过滤掉数据库中的重复数据,只显示一个等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)