【问题标题】:Updating a table within a select statement在 select 语句中更新表
【发布时间】:2009-02-13 13:21:59
【问题描述】:

有什么方法可以更新 mysql 选择查询的 select_expr 部分中的表。这是我想要实现的一个示例:

SELECT id, name, (UPDATE tbl2 SET currname = tbl.name WHERE tbl2.id = tbl.id) FROM tbl;

这在 mysql 中给了我一个错误,但我不明白为什么只要我不更改 tbl 就不可能。

编辑: 我将澄清为什么我不能为此使用普通的构造。

这是我正在处理的问题的更复杂示例:

SELECT id, (SELECT @var = col1 FROM tbl2), @var := @var+1, 
(UPDATE tbl2 SET col1 = @var) FROM tbl WHERE ...

所以我基本上处于这样一种情况,即我在 select 语句期间递增一个变量,并希望在我选择行时反映这种变化,因为我在执行期间使用这个变量的值。此处给出的示例可能可以通过其他方式实现,但是由于不必要的代码太多,我不会在此处发布的实际示例需要此功能。

【问题讨论】:

    标签: sql mysql


    【解决方案1】:

    如果您的目标是每次查询 tbl1 时更新 tbl2,那么最好的方法是创建一个存储过程来执行此操作并将其包装在事务中,如果需要原子性,可能会更改隔离级别。

    您不能在选择中嵌套更新。

    【讨论】:

      【解决方案2】:

      你想要什么结果?选择或更新的结果。

      如果您想根据查询结果进行更新,您可以这样做:

      update table1 set value1 = x.value1 from (select value1, id from table2 where value1 = something)  as x where id = x.id
      

      【讨论】:

      • 我会澄清我的问题
      【解决方案3】:

      开始交易;

      -- 获取当前值

      从计数器中选择值,其中 id = 1 FOR UPDATE;

      -- 增加计数器

      更新计数器 SET value = value + 1 WHERE id = 1;

      提交;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-14
        • 2014-05-15
        • 2010-11-06
        • 2017-01-15
        • 1970-01-01
        • 1970-01-01
        • 2013-04-26
        相关资源
        最近更新 更多