【发布时间】:2014-09-23 03:48:32
【问题描述】:
我想从 mysql 数据库中选择一堆行并更新这些行的查看属性(这是一种“我已阅读这些”标志)。
最初我做了这样的事情:
update (
select a, b, c
from mytable
where viewed = '0'
)
set viewed = '1';
这会很好地选择行并根据需要更新它们的查看属性。但它不会从子查询中返回选定的行。
有没有我可以添加的子句,或者我需要存储子查询等...?我确实考虑过一笔交易,但我最终遇到了同样的问题。我还没有尝试过存储过程...
请有人建议/指出正确的方向,告诉我如何执行上述操作,但另外从子查询中返回选定的表?
提前致谢。
更新:
正如@Barmar、@a_horse_with_no_name、@fancyPants 和@George Garchagudashvil 所指出的......
在 MySQL 中,如果要返回选定的行,则必须使用两个语句来选择和更新,而不是像我最初的帖子中那样使用嵌套语句。
例如
begin;
select a, b, c
from mytable
where viewed = '0';
update mytable
set viewed = '1'
where viewed = '0';
commit;
谢谢大家。
【问题讨论】:
-
UPDATE 和 SELECT 是两个不同的东西。它们必须是两个单独的查询。你想解决什么“问题”?
-
UPDATE 更新,SELECT 选择。你不能同时做这两件事。
-
先选择行
WHERE viewed = 0,然后进行更新。 -
我试图减少选择,然后更新一个查询 - 以提高效率。我还需要将查看的属性设置为原子的,因为它是一个“读取”标志。不要忘记我需要选择结果 - 这是上面的问题。
-
为什么要在同一个查询中尝试选择和更新?你不能分两步做你想做的事吗?
标签: mysql sql select sql-update