Мне нужно обновить поля в таблице для определенного диапазона строк. Например, я хочу изменить CompanyID в строках 10-20.
Я придумал два способа сделать это, но ни один не совсем прав:
Раствор А)
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 не поддерживается внутри подзапроса.
Раствор Б)
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 | |
+-----------+---------+-----------+--+
Затем я хочу изменить CompanyID в строках с 3 по 5 (уменьшено для простоты; в приложении это будут сотни строк за раз, но все последовательно) следующим образом:
+-----------+---------+-----------+--+
| SerialNum | OrderID | CompanyID | |
+-----------+---------+-----------+--+
| S111 | 400 | null | |
| S112 | 400 | null | |
| S113 | 400 | 111 | |
| S114 | 400 | 111 | |
| S115 | 400 | 111 | |
+-----------+---------+-----------+--+