我需要为特定范围的行更新表中的字段。例如,我要更改第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 | |
+-----------+---------+-----------+--+