我想使用order by和limit更新表。原因是我想要抵消前3个条目。我首先进行查询以列出我想要更新的内容,并且这样做有效。
SELECT `Name`,`active`
FROM `tlogon`
WHERE `active`>0 ORDER BY `id` LIMIT 3,18446744073709551610
所以我的表中有8个项目,显示最后3个是正确的,因为其中2个行的活动为零。所以我试着将我的选择变成这样的更新。
UPDATE `tlogon` SET `active`=3
WHERE `active`>0 ORDER BY `id` LIMIT 3,18446744073709551610
这里的想法是它获取active
的列表并忽略前3个,然后我只想在前三个之后更新。但是上面的代码在phpmyadmin中给出了一个错误。
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '18446744073709551610' at line 2
所以我的问题是。为什么我的选择工作,但我的更新查询失败?
好的我已经尝试了别的东西,但我又失败了。我的id是自动增量所以我尝试了下面的代码
UPDATE `tlogon` SET `active`=3
Where `id`>=(
SELECT `id`
FROM `tlogon`
WHERE `active`>0 ORDER BY `id` LIMIT 3,1
)
现在它可以在模拟中运行,但是当我真实地做这个问题时我会遇到这个错误。
#1093 - You can't specify target table 'tlogon' for update in FROM clause
这很烦人,因为我正在做的是让第一个id高于我的极限并改变它们,但我又失败了。
那么我想到了像这样的正确加入
UPDATE `tlogon` AS `a`
RIGHT JOIN `tlogon` AS `b` ON `a`.`id`>`b`.`id`
SET `a`.`active`=3
WHERE (
SELECT `id`
FROM `b`
WHERE `tlogon`.`active`>0 ORDER BY `tlogon`.`id` LIMIT 3,1
)
但我认为我做错了,因为现在告诉我表b不存在。
答案 0 :(得分:1)
UPDATE
语句不支持System.Diagnostics.ProcessStartInfo startInfo = new ProcessStartInfo();
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo = startInfo;
startInfo.FileName = "notepad";
process.Start();
startInfo.FileName = "excel";
process.Start();
的偏移量,只支持要更新的行数。
它的语法是:
LIMIT
您需要找到另一种方法来忽略前3行。
答案 1 :(得分:0)
好的我有一个答案,但只有在使用自动递增ID时才有效。
UPDATE `tlogon` AS `a`
INNER JOIN
(SELECT `id`
FROM `tlogon`
WHERE `active`>0 ORDER BY `id` LIMIT 3,1) as b ON `a`.`id` >= `b`.`id`
SET `a`.`active`=3
因为你不能引用同一个表而我最终使用内部联接到同一个表。
基本上我在where子句中获得下一个最高ID,并且只有在id更高时才更改活动。因此,前三个条目将被忽略,其余条目将被更改为3,这就是我想要的。