mysql - 更新多行

标签 mysql sql

在数据库中,我有一个包含大量信息的表。我想要做的就是设置一个限制,其中数字和数字相同。我认为我走在正确的道路上,但我错过了一些东西。大家有什么想法吗?

UPDATE loc l
SET l.limit = (SELECT (lo.factor*j.limit)
                FROM (SELECT limit, num, fig FROM loc WHERE typ = 'WE') j, loc lo
                WHERE lo.typ = 'TR'  
                AND lo.num = j.num    
                AND lo.fig = j.fig )
WHERE l.typ = 'WE'

最佳答案

您可以通过加入做您想做的事情。但您正在采用相关子查询方法。

我怀疑问题是您的子查询与外部查询不相关。您需要删除子查询中的loc表:

UPDATE loc l
  SET l.`limit` = (SELECT (lo.factor*j.`limit`)
                   FROM (SELECT `limit`, num, fig
                         FROM loc
                         WHERE typ = 'WE'
                        ) j
                   WHERE l.typ = 'TR' AND
                         l.num = j.num  AND
                         l.fig = j.fig
                  )
   WHERE l.typ = 'WE';

此外,limit 是一个保留字。您不应该将其用作列名称。因为是,所以需要将其放在反引号或双引号中。

关于mysql - 更新多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21718204/

相关文章:

php - 如何对数据库数据使用 CASE 条件

php - Codeigniter - join() 只返回一个 "first table"

sql - PostgreSQL - 加入最新记录以按结果分组

php - 正确处理多行多列的查询结果

MySQL GROUP_CONCAT 作为多个字段和自定义顺序

php - 性能批量插入或切片多批量插入的最佳选择是什么?

mysql - 如何从VS2010的服务器资源管理器连接Linux中的mysql数据库

mysql - 如何获取 MySQL 数据库的创建日期?

mysql - 2 列的独特组合,顺序无关

c# - 组合框数据绑定(bind)()检查