代码之家  ›  专栏  ›  技术社区  ›  Per Stilling

更新select语句中的表

  •  5
  • Per Stilling  · 技术社区  · 15 年前

    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语句中递增一个变量,并希望在执行过程中使用该变量的值时,在选择行时反映这一变化。这里给出的示例可能可以用其他方法实现,但是真正的示例需要这个功能,因为有太多不必要的代码,所以我不会在这里发布。

    3 回复  |  直到 15 年前
        1
  •  4
  •   Welbog    15 年前

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

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

        2
  •  2
  •   Amandasaurus    15 年前

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

    如果要根据查询结果进行更新,可以如下操作:

    update table1 set value1 = x.value1 from (select value1, id from table2 where value1 = something)  as x where id = x.id
    
        3
  •  0
  •   Madhurya Gandi    8 年前

    --让我们获取当前值

    从id=1的计数器中选择值进行更新;

    --递增计数器

    更新计数器设置值=值+1,其中id=1;

    犯罪