mysql根据之前的记录增加值

2024-03-17

我有一张桌子

Id|Parent|Counter
--|------|-------
 1| A    | NULL
 2| A    | NULL 
 3| A    | NULL
 4| B    | NULL
 5| B    | NULL
 6| C    | NULL
 7| D    | NULL
 8| D    | NULL

我想更新表,使计数器列更新 (+1) 与之前的一样长parent = parent。如果不,counter =1 so:

Id|Parent|Counter
--|------|-------
 1| A    | 1
 2| A    | 2
 3| A    | 3
 4| B    | 1
 5| B    | 2
 6| C    | 1
 7| D    | 1
 8| D    | 2

我有大约 350 万条记录。

我可以获得选择查询,但可以使其与更新一起使用。这就是我所拥有的:

SELECT  t.Parent, (
  SELECT COUNT( * ) 
  FROM bomitems AS x
  WHERE x.id <= t.id
  AND x.Parent = t.Parent
  ) AS Counter
FROM bomitems AS t

您编写了一个优秀且聪明的查询来生成这些行号,该查询避免了使用会话变量的混乱解决方案。要进行更新,只需加入您的表即可bomitems对于这个查询:

UPDATE bomitems t1
INNER JOIN
(
    SELECT
    t.ID,
    t.Parent,
    (SELECT COUNT(*) FROM bomitems AS x WHERE x.id <= t.id AND x.Parent = t.Parent) AS Counter
    FROM bomitems t
) t2
    ON t1.ID = t2.ID
SET t1.Counter = t2.Counter;

我在本地 MySQL Workbench 上测试了这个查询,它似乎有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql根据之前的记录增加值 的相关文章

  • 检查 mySQL 数据库中现有用户的最佳方法? [复制]

    这个问题在这里已经有答案了 我正在尝试在 PHP 中创建用户登录 创建脚本 并且想知道创建用户时检查用户名是否存在的最佳方法 目前 我有以下代码 function createUser uname pword server gt conne
  • 为什么 MySQL 不允许我删除“更新 CURRENT_TIMESTAMP 时”属性?

    我有一个包含两个时间戳字段的表 我只是用名称和类型定义了它们TIMESTAMP 但由于某种原因 MySQL 自动设置其中一个默认值和属性on update CURRENT TIMESTAMP 我计划在这两个字段中都没有默认值 但其中一个字段
  • mysql_upgrade 失败 - innodb 表不存在?

    我正在将 mysql 5 5 docker 容器数据库升级到 mysql 5 6 docker 容器 我能够解决所有其他问题 最后我的服务器运行的是 5 6 但是当我运行 mysql upgrade 时出现以下错误 ERROR root 1
  • 如何使用 PHP mysqli 增加 MySQL 中的值

    我在 MySQL 表中有一个整数列 名为col1 现在 我需要的是将其值增加某个数字 例如 1 可能是 2 3 或任何数字 也就是说 如果它的值已经是 10 现在我希望它变成 11 我知道 我可以通过首先选择原始值 用 PHP 增加它 然后
  • 从命令提示符启动mysql服务器时出错

    我是 sql 新手 我安装了 mysql 并且正在阅读这本书 Java 如何编程连接到 mysql 我收到以下错误 关于时间戳 我明白原因 但我正在尝试修复 无法创建测试文件 C Program Files MySQL MySQL Serv
  • SSL 连接在 MySQL Workbench 中有效,但在 DBeaver 中无效

    为当今读者编辑 这是旧版本 DBeaver 中的一个错误 随后已修复 我尝试在 DBeaver 中使用 SSL 连接到 Google Cloud SQL MySQL 实例时遇到 访问被拒绝 错误 我能够 在 MySQL Workbench
  • mysql 密码 使用 PHP 连接到 MySQL

    在使用 PHP 连接到 MySQL 的教程中 您会看到类似于以下内容的内容 pdo new PDO mysql host localhost dbname mydb myuser mypassword 我在本地主机上有一个以这种方式工作的连
  • 绕过外键约束强制删除mysql

    我试图从数据库中删除除一个表之外的所有表 最终出现以下错误 无法删除或更新父行 外键约束失败 当然 我可以反复试验来看看这些关键约束是什么 并最终删除所有表 但我想知道是否有一种快速方法来强制删除所有表 因为我将能够重新插入那些我想要的表
  • ERROR 188 (HY000): FTS 查询超出结果缓存限制 mysql

    我的表的文本列上有全文索引 约有 1100 万行 表结构 CREATE TABLE review id int 11 NOT NULL AUTO INCREMENT comments text COLLATE utf8mb4 unicode
  • 使用csv文件-PHP创建表到mysql时添加反引号

    我有一个 php 代码 它将使用 csv 文件创建一个到 mysql 数据库的表 然而 某些列标题没有被 mysql 读取 mysql 唯一一次读取查询是当我添加反引号 您能帮助我在查询中的何处添加反引号吗 这是我的代码 file C Us
  • 计算 MySQL 中每个唯一 ID 与前一行的日期差异

    我是一名 SQL 初学者 正在学习查询的诀窍 我正在尝试查找同一客户购买之间的日期差异 我有一个如下所示的数据集 ID Purchase Date 1 08 10 2017 1 08 11 2017 1 08 17 2017 2 08 09
  • MySQL CREATE TABLE 语句上的外键错误(错误:150)

    我觉得我已经在一对非常简单的创建表语句上尝试了一切可能的方法 类型匹配 我尝试使用 ENGINE InnoDB 等 但很困惑为什么我收到外键错误 我已经离开 SQL 一段时间了 所以这可能是一个简单的问题 mysql gt CREATE T
  • 无法在 MySQL 中运行查询语法错误意外

    我正在运行工作台 5 2 47 我写了一个很长的程序 用于基本数据检查 如果数据库中不存在记录 则将插入该记录 该过程保存时没有任何问题 但当我尝试运行它时 MySQL 5 5 抛出错误 它很长 里面有很多公司敏感数据 或者我会把它发布在这
  • 将日期格式(在数据库或输出中)更改为 dd/mm/yyyy - PHP MySQL

    MySQL 将日期存储在我的数据库中 默认情况下 为 YYYY MM DD 我的日期的字段类型是 DATE 我不需要任何时间存储 有没有一种简单的方法可以默认更改它到 DD MM YYYY 我在两个不同的表中调用不同的日期 并且在我的任何代
  • PHP/PDO/MySQL:插入 MEDIUMBLOB 会存储错误数据

    我有一个简单的 PHP Web 应用程序 它通过文件上传接受图标图像并将它们存储在 MEDIUMBLOB 列中 在我的机器 Windows 和两台 Linux 服务器上 这工作得很好 在第三台 Linux 服务器上 插入的图像已损坏 在 S
  • CodeIgniter Active Record - 组 OR 语句

    这是我的问题 MySQL 或 条件 https stackoverflow com questions 8604380 mysql or condition 解决方案是将 OR 语句分组 但我正在使用 CodeIgniters Active
  • 在 EXISTS 查询中使用 LIMIT 有什么意义吗?

    添加一个是否有任何性能优势LIMIT to an EXISTS查询 或者 MySQL 会自行应用限制吗 Example IF EXISTS SELECT 1 FROM my table LIMIT 1 can this improve pe
  • 如何在 MySQL 中使用 INET_ATON 进行通配符搜索 IP 地址?

    我发现这个方法可以使用 INET ATON 将 IP 地址作为整数存储在 MySQL 数据库中 https stackoverflow com a 5133610 4491952 https stackoverflow com a 5133
  • 如何将mysql数据库移动到另一个安装点

    我有一个 MySQL 数据库 它变得越来越大 我想将整个数据库移动到另一个安装点 在那里我有足够的存储空间 我希望传输当前数据 并将新数据保存到新位置 软件堆栈 在 FreeBSD 6 上运行的 MySQL 5 当然其他答案也是有效的 但如
  • 通过“SELECT”命令选择每组的前两条记录的最佳方法是什么?

    例如我有下表 id group data 1 1 aaa 2 1 aaa 3 2 aaa 4 2 aaa 5 2 aaa 6 3 aaa 7 3 aaa 8 3 aaa 通过 SELECT 命令选择每组的前两条记录的最佳方法是什么 如果没有

随机推荐