更新给定行范围内的字段

时间:2019-05-02 14:11:09

标签: mysql database

我需要为特定范围的行更新表中的字段。例如,我要更改第10-20行的CompanyID。

我已经提出了两种方法来实现此目的,但都不是完全正确的:

解决方案A)

    UPDATE Serials 
    SET Campaign_id = (Select Count(*) from Campaigns)
    WHERE Order_id = 400 AND Serial_num IN (
    Select  Serial_num FROM Serials
    Order By Serial_num LIMIT 10,10)

此解决方案似乎是最简单的方法,但是此解决方案的问题在于LIMIT int,int在子查询中不受支持。

解决方案B)

UPDATE Serials 
SET Campaign_id = (Select Count(*) from Campaigns)
WHERE Order_id = 400 AND Serial_num IN ((
SELECT * FROM Serials
JOIN(
    Select  Serial_num FROM Serials
    Order By Serial_num 
     LIMIT 10,10
    ) AS d
    on Serials.Serial_Num
d.Serial_num))

在阅读了有关解决子查询中的LIMIT问题的其他文章之后,我尝试了此解决方案,但是我在语法中缺少了一些内容,因为它说IN在此位置无效。

一个例子就是这样。我有一个类似这样的数据库:

+-----------+---------+-----------+--+
| SerialNum | OrderID | CompanyID |  |
+-----------+---------+-----------+--+
| S111      |     400 | null      |  |
| S112      |     400 | null      |  |
| S113      |     400 | null      |  |
| S114      |     400 | null      |  |
| S115      |     400 | null      |  |
+-----------+---------+-----------+--+

然后,我想更改第3到第5行中的CompanyID(为简单起见缩小;在应用程序中,一次将有数百行,但都是连续的),如下所示:

+-----------+---------+-----------+--+
| SerialNum | OrderID | CompanyID |  |
+-----------+---------+-----------+--+
| S111      |     400 | null      |  |
| S112      |     400 | null      |  |
| S113      |     400 | 111       |  |
| S114      |     400 | 111       |  |
| S115      |     400 | 111       |  |
+-----------+---------+-----------+--+

0 个答案:

没有答案