gpt4 book ai didi

MySQL 查询 - 在 UPDATE 中使用 SELECT

转载 作者:搜寻专家 更新时间:2023-10-30 23:39:23 25 4
gpt4 key购买 nike

我正在尝试使用 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 或类似方法的其他方法。任何帮助将不胜感激。

最佳答案

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

一种方法在 UPDATE 本身中使用 LIMIT。但是,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,您可以使用多个列来唯一定义一行。

关于MySQL 查询 - 在 UPDATE 中使用 SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36953681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com