MySQL查询 - 在UPDATE

时间:2016-04-30 10:22:23

标签: mysql sql database select offset

我尝试使用SELECT和OFFSET选择数据库中的特定行。我得到的结果是合乎逻辑的,我确实得到了我想要的行。但是我需要更新相同的特定行,所以我做了类似的事情:

UPDATE table 
SET value=1 
WHERE value IN (SELECT * FROM(
SELECT value FROM table WHERE some criteria LIMIT 1 OFFSET 2) temp_tab);

现在我对此代码的期望是仅更新所选行。相反,它更新数据表中的所有行并将其值设置为1.

当我只使用时:

SELECT * FROM(
    SELECT value FROM table WHERE some criteria LIMIT 1 OFFSET 2) temp_tab

我只得到1行作为输出。 (LIMIT 1 OFFSET 2确保我确实获得了第1行并且第2行可用)我不确定我做错了什么或者我应该如何实现这一目标。

注意:我必须使用SELECT而不是使用行的唯一ID或类似的其他方法。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

首先,使用LIMITOFFSET时,您还需要使用ORDER BY。否则你获得的行是不确定的。

一种方法在LIMIT内使用UPDATE。但是,UPDATE不允许OFFSET。所以:

UPDATE table 
    SET value = 1 
    WHERE some criteria
    ORDER BY ??
    LIMIT 1;

最好的方法是使用唯一的ID。您可以使用双子查询方法执行此操作:

UPDATE table 
    SET value = 1 
    WHERE id IN (SELECT id
                 FROM (SELECT id
                       FROM table
                       WHERE some criteria
                       ORDER BY ??
                       LIMIT 1 OFFSET 2
                      ) t
                );

如果您没有唯一的ID,则可以使用唯一定义单行的多列。