mysql数据库去重[通俗易懂]

mysql数据库去重[通俗易懂]2019独角兽企业重金招聘Python工程师标准>>>…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

##问题 mysql数据库表osc_table_a中出现了重复记录,需要通过sql来去重,仅留下最早插入的记录。

表osc_table_a:

id     row1     row2    row3

1      123        abc     *****

2      123        def     *****

3      123        abc     *****

4      456        xyz     *****  

5      456        xyz     *****

去重结果 id row1 row2 row3

1      123        abc     *****

2      123        def      *****

4      456        xyz      *****

##完整sql

<!-- lang: sql -->
DELETE t FROM osc_table_a t WHERE
(
osc_table_a.row1,
osc_table_a.row2
)IN(
SELECT a.row1, a.row2 FROM(
        SELECT * FROM osc_table_a tmp1 GROUP BY tmp1.row1, tmp1.row2 HAVING COUNT(tmp1.id)> 1
 ) a
)
AND t.id NOT IN(
SELECT b.id FROM (
	    SELECT MIN(tmp2.id) id FROM osc_table_a tmp2 GROUP BY tmp2.row1, tmp2.row2 HAVING COUNT(tmp2.id)> 1
) b
);

##问题

  1. mysql中DELETE使用别名问题

    如果 DELETE t FROM osc_table_a t WHERE…… 写为 DELETE FROM osc_table_a t WHERE…… 会报语法错误

     * SELECT * FROM osc_table_a b;(正确,可以使用表别名)
     * DELETE FROM osc_table_a b;(错误)
     * DELETE b FROM osc_table_a b;(正确)
    
  2. [Err] 1093 – You can’t specify target table ‘osc_table_a’ for update in FROM clause

    如果去掉 SELECT a.row1, a.row2 FROM(……)a 或者 SELECT b.id FROM (…..)b的报错。

    作用和将查询结果先存入临时表,然后取出来是一样的效果。

转载于:https://my.oschina.net/ijustdoit/blog/332993

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/186986.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号