MySQL通过UPDATE/DELETE合并重复数据记录

2024-05-22

我有一个看起来像这样的表:

mysql> SELECT * FROM Colors;
╔════╦══════════╦════════╦════════╦════════╦════════╦════════╦════════╗
║ ID ║ USERNAME ║  RED   ║ GREEN  ║ YELLOW ║  BLUE  ║ ORANGE ║ PURPLE ║
╠════╬══════════╬════════╬════════╬════════╬════════╬════════╬════════╣
║  1 ║ joe      ║ 1      ║ (null) ║ 1      ║ (null) ║ (null) ║ (null) ║
║  2 ║ joe      ║ 1      ║ (null) ║ (null) ║ (null) ║ 1      ║ (null) ║
║  3 ║ bill     ║ 1      ║ 1      ║ 1      ║ (null) ║ (null) ║ 1      ║
║  4 ║ bill     ║ (null) ║ 1      ║ (null) ║ 1      ║ (null) ║ (null) ║
║  5 ║ bill     ║ (null) ║ 1      ║ (null) ║ (null) ║ (null) ║ (null) ║
║  6 ║ bob      ║ (null) ║ (null) ║ (null) ║ 1      ║ (null) ║ (null) ║
║  7 ║ bob      ║ (null) ║ (null) ║ (null) ║ (null) ║ (null) ║ 1      ║
║  8 ║ bob      ║ 1      ║ (null) ║ (null) ║ (null) ║ (null) ║ (null) ║
╚════╩══════════╩════════╩════════╩════════╩════════╩════════╩════════╝

我想经营一个UPDATE and DELETE它将查找并删除重复项并合并记录,以便我们以此作为结果结束。

mysql> SELECT * FROM Colors;
╔════╦══════════╦═════╦════════╦════════╦════════╦════════╦════════╗
║ ID ║ USERNAME ║ RED ║ GREEN  ║ YELLOW ║  BLUE  ║ ORANGE ║ PURPLE ║
╠════╬══════════╬═════╬════════╬════════╬════════╬════════╬════════╣
║  1 ║ joe      ║   1 ║ (null) ║ 1      ║ (null) ║ 1      ║ (null) ║
║  3 ║ bill     ║   1 ║ 1      ║ 1      ║ 1      ║ (null) ║ 1      ║
║  6 ║ bob      ║   1 ║ (null) ║ (null) ║ 1      ║ (null) ║ 1      ║
╚════╩══════════╩═════╩════════╩════════╩════════╩════════╩════════╝

我知道我可以轻松地使用脚本来完成此操作,但为了更好地学习和理解 MySQL,我想学习如何使用纯SQL.


这只是一个预测。它不会更新表,也不会删除某些数据。

SELECT  MIN(ID) ID,
        Username,
        MAX(Red) max_Red,
        MAX(Green) max_Green,
        MAX(Yellow) max_Yellow,
        MAX(Blue) max_Blue,
        MAX(Orange) max_Orange,
        MAX(Purple) max_Purple
FROM    Colors
GROUP   BY Username
  • SQLFiddle 演示 http://www.sqlfiddle.com/#!2/cdb3b/1

UPDATE

如果确实要删除这些记录,则需要先运行 UPDATE 语句才能删除记录

UPDATE  Colors a
        INNER JOIN
        (
            SELECT  MIN(ID) min_ID,
                    Username,
                    MAX(Red) max_Red,
                    MAX(Green) max_Green ,
                    MAX(Yellow) max_Yellow,
                    MAX(Blue) max_Blue,
                    MAX(Orange) max_Orange,
                    MAX(Purple) max_Purple
            FROM    Colors
            GROUP   BY Username
        ) b ON a.ID = b.Min_ID 
SET     a.Red = b.max_Red,
        a.Green = b.max_Green,
        a.Yellow = b.max_Yellow,
        a.Blue = b.max_Blue,
        a.Orange = b.max_Orange,
        a.Purple = b.max_Purple

然后您现在可以删除记录,

DELETE  a
FROM    Colors a
        LEFT JOIN
        (
            SELECT  MIN(ID) min_ID,
                    Username
            FROM    Colors
            GROUP   BY Username
        ) b ON a.ID = b.Min_ID 
WHERE   b.Min_ID  IS NULL
  • SQLFiddle 演示 http://www.sqlfiddle.com/#!2/c8635/1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL通过UPDATE/DELETE合并重复数据记录 的相关文章

  • 比较表中的行以了解字段之间的差异

    我有一个包含 20 多列的表 客户端 其中大部分是历史数据 就像是 id clientID field1 field2 etc updateDate 如果我的数据如下所示 10 12 A A 2009 03 01 11 12 A B 200
  • 显示表 FULLTEXT 索引列

    我希望运行一个查询 该查询将返回表中全文索引的列列表 该表采用 MyISAM 格式 我将使用 php 来构建查询 理想情况下 我会运行查询 它会返回信息 以便我可以构造一个以逗号分隔的列字符串 例如 名 姓 电子邮箱 这在 MySQL 中可
  • 使用Powershell访问远程Oracle数据库

    我需要能够连接到我的网络上基于 Windows 7 的 Oracle 服务器 32 位 Oracle XE 我需要连接的机器运行 Windows 7 64 位 两台机器上都安装了 Powershell 我已在 64 位计算机上安装了 Ora
  • 查询中列的顺序重要吗?

    当从 MySQL 表中选择列时 与表中的顺序相比 选择列的顺序是否会影响性能 不考虑可能覆盖列的索引 例如 您有一个包含行 uid name bday 的表 并且有以下查询 SELECT uid name bday FROM table M
  • SQLite HAVING 比较错误

    我有一个测试 SQLite 表 用于存储带有值的报告数据 CREATE TABLE IF NOT EXISTS test fact daily revenue date TEXT revenue NUMERIC product TEXT I
  • SQL Server 用分隔符分割字符串

    我有一个输入字符串 100 2 3 101 2 1 103 2 3 我想解析它并将其添加到具有 3 列的表中 因此它应该是 f x col1 col2 col3 100 2 3 类似的其他数据以逗号分隔作为记录和 作为列 Thanks ni
  • PHP 绑定“bigint”数据类型(MySQLi 准备好的语句)

    studentId 57004542323382 companyOfferId 7 sql INSERT INTO studentPlacement companyOfferId studentId VALUES if stmt db gt
  • 当sql连接中存在两个同名列时,如何从一个表列中获取值

    当我连接两个具有相同名称列的表时 我目前面临着尝试获取值的问题 例如 table1 date和table2 date 每个表中的日期不同 我将如何获取 日期 本例中的表1 我目前正在跑步 while row mysqliquery gt f
  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • MySQL Connector/C++ 库链接错误问题

    PROBLEM 好吧 我一直在尝试遵循 MySQL Forge Wiki 和其他一些网站上的示例代码 这些网站提供了有关如何获得简单数据库连接的教程 但由于某种原因 我的项目总是因链接错误而失败 我可以我自己不明白为什么或如何解决它 我仍在
  • 拆分列中的字符串并在列中添加值

    我有一个包含几行数据的表 如下所示 16 W 2 Work ALBO 00 Proposal ALxO Amendement 1 20091022 signed pdf 17 W 2 Work ALBO 00 Proposal Level1
  • Python Pandas 删除重复单元格 - 保留行

    我试图根据单列删除特定列的重复值 同时保留行的其余部分 df pd DataFrame A 1 2 3 4 B 5 5 6 7 C a a b c D c d e f 我想根据 C 列中的重复项删除 A 列和 B 列中的值 但保留 D 列的
  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • 独立对列进行排序,使得所有空值都位于每列的最后

    这是一个名为的示例表animal name color fox brown fox red dog gold 现在 我想要的是这样的结果 fox dog brown gold red 名称应该是结果的列 不同颜色值作为行 我的第一个想法是
  • Apache、PHP 和 MySQL 可移植吗?

    我可以在外部硬盘上运行 Apache PHP 和 MySQL 吗 我需要这个 因为我在不同的地方工作 计算机 有时我没有安装和配置所有使用的应用程序 当然可以 XAMPP http www apachefriends org en xamp
  • 列中差异的数量

    我想检索一列每行中有多少个字母的差异 例如 如果您有一个值 test 而另一行有一个值 testing 则 test 和 testing 之间的差异为 4 个字母 该列的数据值为 4 I have reflected about it an
  • sql server 按组排名

    问题看似简单 但我却无法理解 这是针对 sql 服务器的 what I have in a table What I need as a output cksum id cksum id 2162514679 204 2162514679
  • 如何在 PostgreSQL 中使用具有多个值的 SQL LIKE 条件?

    有没有更短的方法来查找多个匹配项 SELECT from table WHERE column LIKE AAA OR column LIKE BBB OR column LIKE CCC 这个问题适用于 PostgreSQL 9 1 但如
  • 是否有适用于所有数据库的标准sql

    如下所示 不同数据库的语法有所不同 是否存在适用于所有数据库的标准方法 有没有什么工具可以将任意sql转换为任意sql SQL Server 2005 CREATE TABLE Table01 Field01 int primary key
  • MySQL 查询计算上个月

    我想计算上个月的订单总额 我收到了从当前日期获取当月数据的查询 SELECT SUM goods total AS Total Amount FROM orders WHERE order placed date gt date sub c

随机推荐

  • 在 angularJS 中覆盖模块值/常量的最佳方法

    我用 angularJS 编写了一个模块 封装了所有后端通信 为了获得更大的灵活性 我将 api 前缀作为模块上的常量值 可能是值 因为我没有在配置阶段使用它 所以像 angular module myapp data constant a
  • 如何使用Codelite 11.0.0编译静态库?

    我想用我为 C 项目编写的所有函数编译一个静态库 我在 Ubuntu 16 04 上使用 CodeLite 11 0 0 配置为使用 GCC 作为编译器 我已按照中的说明进行操作CodeLite 的教程 http codelite org
  • 如何向 Firefox 添加自定义网络限制?

    这是 stackoverflow 的主题 因为它与开发工具有关 我想要做的是将卫星互联网配置文件加载到 F12 网络节流 比如 500ms 延迟和 25Mbit 的最大带宽 由于广泛使用require js 根据我对 Firefox 代码的
  • 确定列的累积最大值

    我正在尝试以下代码 df pd DataFrame 23 52 36 49 52 61 75 82 97 12 columns A B df C np where df A gt df C shift df A df C shift pri
  • 将 Flash 文件上传与 JSF 集成

    我看到我们可以通过flash文件上传来上传多个文件 喜欢SWF上传 http code google com p swfupload or YUI上传器 http yuilibrary com yui docs uploader 是否可以将
  • msbuild 脚本中的其他路径

    如何为 MSBuild 任务指定其他程序集引用路径 到目前为止 我有以下脚本 但无法弄清楚如何指定其他搜索路径
  • 内容丰富的 api markdown 转换为 HTML

    有没有什么简单的方法可以将 Markdown 文本从 Contentful api 转换为 html 代码以显示在 html 页面上 我尝试过使用 pagedown 和一些类似的技术 但似乎没有一个对我有用 我是 Contentful 的客
  • 重定向到上一页时如何发送变量数据

    在完成特定任务后 我使用以下代码将用户重定向到上一页 if isset SERVER HTTP REFERER this gt session gt set userdata previous page SERVER HTTP REFERE
  • 如何获取laravel 5.4中的所有头信息

    当我打印时 echo pre print r getallheaders 它给出输出 Host gt abc com User Agent gt Mozilla 5 0 Macintosh Intel Mac OS X 10 12 rv 5
  • 引用Scala中内部类的类型

    下面的代码尝试模仿DSL 的多态嵌入 http www daimi au dk ko papers gpce50 hofer pdf 而不是给出行为Inner 它被编码在useInner其封闭类的方法 我添加了enclosing方法 以便用
  • 如何验证单选按钮?

    我的 Rails 应用程序中有一个单选按钮 我想编写一个 java 脚本代码 在未选择任何选项时验证这一点 在你的 votes 类中做类似的事情 class Myvotes lt ActiveRecord Base validates vo
  • 如何在 C 程序中声明 unsigned int

    在这个链接上我遇到了http lxr linux no linux v2 6 36 include linux pci h L299 http lxr linux no linux v2 6 36 include linux pci h L
  • jqGrid - 如何将网格设置为最初不加载任何数据?

    如何创建网格但不加载任何数据 如果我省略url选项然后loadError回调被触发 目前我们设置url NoData json其中 NoData json 是一个静态文件 其中没有行 问题出在我们的loadComplete如果网格不包含数据
  • 什么是数组的浅拷贝

    当您调用 ArrayList 的 Clone 方法时 将创建列表的浅表副本 什么是数组的浅拷贝 如果 ArrayList 中有引用 则相同的引用将被复制到克隆的 ArrayList 中 对象不会被克隆
  • 性能:XmlSerializer、XmlReader、XmlDocument、XDocument

    我正在开发一个小型 Web 项目 并且想要读取 写入 XML 文件 性能是我的首要任务 我已经来到这篇很棒的文章 http www nearinfinity com blogs joe ferner performance linq to
  • 使用 Numpy 与 einsum 和 tensordot 进行相同的操作

    假设我有两个 3D 数组A and B形状的 3 4 N and 4 3 N 我可以计算沿第三轴的切片之间的点积 with einsum np eisum ikl kjl gt ijl A B 是否可以执行相同的操作numpy tensor
  • 当两个表非常相似时,什么时候应该将它们合并?

    我有事件和照片 然后对两者进行评论 现在 我有两个评论表 一个用于与事件相关的评论 另一个用于照片评论 架构与此类似 CREATE TABLE EventComments CommentId int EventId int Comment
  • 授予用户 ALTER 函数的权限

    我试着ALTER一个新用户的函数 我收到错误 ERROR must be owner of function ACases Error ERROR must be owner of function ACases SQL state 425
  • NSConcreteMapTable backgroundView:willChangeToGraphicsQuality: ...错误

    我正在开发一款 iPad 应用程序 以帮助我在国外时管理费用 我有古典主视图和细节视图的分割视图 在主视图中有费用列表 在详细视图中 你猜怎么着 每项费用的详细信息 当我点击详细信息中的按钮时 将使用带有表单的模态 Segue 加载新视图
  • MySQL通过UPDATE/DELETE合并重复数据记录

    我有一个看起来像这样的表 mysql gt SELECT FROM Colors ID USERNAME RED GREEN YELLOW BLUE ORANGE PURPLE 1 joe 1 null 1 null null null 2