我正在尝试修改本教程中的解决方案来编写一个既查询又更新我的表的SQL查询: enter link description here
DECLARE @column1 varchar(2);
SET @column1 = (SELECT `Id`, `Url` FROM `MyTable` WHERE `Retrieved` = 0);
SELECT * FROM `MyTable` WHERE `AdId`, `Url` = @column1;
UPDATE `MyTable` SET `Retrieved` = 1 where `Id`, `Url` = @column1;
我试图同时实现以下目标:
SELECT Id, Url FROM MyTable WHERE Retrieved = 0
UPDATE MyTable SET Retrieved = 1
我已选择的结果
基本上,我想从“已检索”列等于0的ID和Url列中选择所有数据。然后我想为我选择的行将“已检索”列设置为1。
答案 0 :(得分:1)
"正常" SQL方法是:
UPDATE MyTable
SET Retrieved = 1
WHERE id IN (SELECT Id FROM MyTable WHERE Retrieved = 0);
这在MySQL中不起作用。假设id
MyTable
在UPDATE MyTable
SET Retrieved = 1
WHERE Retrieved = 0;
中是唯一的(在我看来是一个合理的假设),那么这就是你想要的:
property-gallery
答案 1 :(得分:0)
UPDATE t SET t.Retrieved=1 FROM MyTable t WHERE t.Retrieved=0
这只是更新行,基本上你已经选择了。在您的情况下,您希望更新所选行检索列的行等于0。
另一件事,也许是为了可读性,或者你需要返回的行,你可以使用cte。
--first get only the records you need
WITH MyRecords_cte
AS
(
SELECT Id, URL, Retreived FROM MyTable WHERE Retreived=0
)
UPDATE MyRecords_cte SET MyRecords_cte.Retreived=1
完成更新后,您可以返回数据。