我有下表
#key | #value
colour | red
weather | blue
现在我想用键颜色将行的值更新为键天气的行的值。所以我在做:
UPDATE table_name
SET value = (SELECT value FROM table_name WHERE key = "weather")
WHERE key = "colour";
但是这个更新给了我以下错误信息:
您不能在 FROM 子句中指定要更新的目标表
我怎样才能不出错地进行该查询?
我有下表
#key | #value
colour | red
weather | blue
现在我想用键颜色将行的值更新为键天气的行的值。所以我在做:
UPDATE table_name
SET value = (SELECT value FROM table_name WHERE key = "weather")
WHERE key = "colour";
但是这个更新给了我以下错误信息:
您不能在 FROM 子句中指定要更新的目标表
我怎样才能不出错地进行该查询?
这可能是因为select查询可能会为该列返回多个值value
UPDATE table_name
SET value = (SELECT max(value) FROM table_name WHERE key = "weather")
WHERE key = "colour";
或者
UPDATE table_name
SET value = (SELECT value FROM table_name WHERE key = "weather" limit 1)
WHERE key = "colour";
table_name您可以尝试通过将子查询中的实例替换为(SELECT * FROM table_name):
UPDATE table_name
SET table_name.A =
(
SELECT B
FROM (SELECT * FROM table_name) AS something
INNER JOIN ...
)
您不想在现实生活中只在子查询中使用 SELECT * FROM 表;我只是想让示例保持简单。实际上,您应该只在最里面的查询中选择您需要的列,并添加一个好的 WHERE 子句来限制结果。
编辑:-
正如您已经评论过的那样,但我已经在上面回答了使用这样的临时表:-
UPDATE table_name
SET value = (SELECT value FROM (SELECT value FROM table_name WHERE key="weather") AS x)
WHERE key="colour"
如果你的 sql 支持 'LIMIT',你可以试试这个
UPDATE table_name SET value = (SELECT value FROM table_name WHERE key = "weather" LIMIT 1 ) WHERE key = "colour";
UPDATE table_name
SET colour ='red',weather =blue
WHERE column_name = some_value;
它不会那样工作。您不能同时对同一个表进行读取和写入查询。使用两个不同的表,它将起作用。
UPDATE `table` SET value = (SELECT value FROM `Table_b` WHERE `other_value` = 'xy' LIMIT 1) WHERE `key` = 'colour'