如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用:
insert ignore into table_name(email,phone,user_id) values('test9@163.com','99999','9999'),这样当有重复记
录就会忽略,执行后返回数字0,还有个应用就是复制表,避免重复记录:
insert ignore into table(name) select name from table2
方案二:使用Replace
replace的语法格式为:
1. replace into table_name(col_name, ...) values(...)
2. replace into table_name(col_name, ...) select ...
3. replace into table_name set col_name=value, ...
算法说明:
REPLACE的运行与INSERT很相像,但是如果旧记录与新记录有相同的值,则在新记录被插入之前,旧记录被删除,即:
1.尝试把新行插入到表中
2.当因为对于主键或唯一关键字出现重复关键字错误而造成插入失败时:
从表中删除含有重复关键字值的冲突行
再次尝试把新行插入到表中
旧记录与新记录有相同的值的判断标准就是:表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义
。该语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行。
返回值:
REPLACE语句会返回一个数,来指示受影响的行的数目。该数是被删除和被插入的行数的和。
受影响的行数可以容易地确定是否REPLACE只添加了一行,或者是否REPLACE也替换了其它行:检查该数是否为1(添加)或
更大(替换)。
//查询表中的数据 同时某个字段不重复 并且排序
首先做一下查询某个字段不重复(使用group by);
select * from 表名 where group by 不重复的字段名;
在做一下排序,我之前有发过一次排序,这次就做一个简单排序
order by 字段a=0 desc, 字段a desc,字段b desc (a字段等于0在最前面,a字段除了0之外的都为倒叙,b字段倒叙);
这样组合起来就好了
select * from 表名 where group by 不重复的字段名 order by 字段a=0 desc, 字段a desc,字段b desc;
需求说明
1、我需要查询某列不重复的数据
2、并且显示不重复数据的所有项
sql语句如下
select * from data group by address
如果是仅仅查询某列不重复数据,只需要一列
效果如下
sql语句
select DISTINCT address from data
这里有一个非常非常需要注意的地方:
SELECT DISTINCT [字段名]后面不能再跟其他的字段,否则检索出来的记录仍然会含有重复项;
错误写法:
SELECT DISTINCT [字段名] ,[其他字段名] FROM [表名] WHERE [检索条件字句]
如果我们的记录集里还需要有其他字段值 ,那怎么办呢?
实际上,我们完全可以用另一种办法来解决问题只是需要用到子查询而已!
使用GROUP BY 分组
有一点需要注意:
使用带有GROUP BY字句的查询语句时,在SELECT列表指定的列要么是GROUP BY 指定的列,要么包含聚合组函数
所以用这样一句SQL就可以去掉重复项了:
select * from msg group by terminal_id
这样就得到我们想要的结果集了:
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)