必威体育Betway必威体育官网
当前位置:首页 > IT技术

MySQL——DELETE语句中的坑

时间:2019-09-05 04:10:00来源:IT技术作者:seo实验室小编阅读:70次「手机版」
 

delete语句

在网上搜索了一个mysql数据库删除重复数据的sql,原文是这样的:

DELETE
FROM
    people
WHERE
    peopleName IN (
        SELECT
            peopleName
        FROM
            people
        GROUP BY
            peopleName
        HAVING
            count(peopleName) > 1
    )
AND peopleId NOT IN (
    SELECT
        min(peopleId)
    FROM
        people
    GROUP BY
        peopleName
    HAVING
        count(peopleName) > 1
)

运行之后报错,起初以为是没给出别名的问题,给别别名之后依然报错,于是将这个sql拆开,只写基本的删除语句:

DELETE FROM people p WHERE p.username = 'sheamus'

执行之后依然不可以,经研究后得知,DELETE语句中使用别名需要在DELETE与FROM中间写上别名

DELETE p FROM people p WHERE p.username = 'sheamus'

这样运行后就可以了。将这个原因放入最初的sql中,发现还是不行,加上别名之后的sql还是报错,仔细在网上找了关于MySQL语句应注意的地方,终于找到原因,原来在DELETE语句中有WHERE语句中不能出现出现同一张表,people这张表出现在WHERE语句中所有这个语句报错,正确的语句应该是:

DELETE
FROM
    `user`
WHERE
    username IN (
        SELECT
            username
        FROM (
			SELECT * FROM `user`
			 ) AS t
        GROUP BY
            username
        HAVING
            count(username) > 1
    )
AND uid NOT IN (
    SELECT
        min(uid)
    FROM(
		SELECT * FROM `user`
		) AS t
    GROUP BY
        username
    HAVING
        count(username) > 1
)

MySQL删除重复数据的sql经测试可用。

相关阅读

MySQL数据库-三大范式

第一范式第一范式(1NF)要求数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值。若某一列有多个值,可以将该列单独拆分

MySQL 添加索引,删除索引及其用法

.索引的作用       一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易

关于mysql server的默认编码方式latin1

   但是我发现每次重启mysql服务,这些设置就恢复成默认的设置latin1 解决方法很简单:在mysql的配置文件my.ini写下character-set-

1130 - Host XXX is not allowed to connect to this

1.在用Navicat配置远程连接Mysql数据库时遇到如下报错信息,这是由于Mysql配置了不支持远程连接引起的。 2.在安装Mysql数据库的主

mysql的分页

mysql提供了分页的函数limit m,n 其中m代表起始行,n代表总行数.我们还可以根据实际情况来改写我们的分页语句.如果只给定一个参数

分享到:

栏目导航

推荐阅读

热门阅读