使用子查询更新具有来自同一表的值的表

时间:2018-03-28 09:05:05

标签: mysql sql sql-server sqlite

我使用sqlite并且有一个看起来像的表:

my table

我正在尝试使用col2对应的col1

中的值更新refer列

我尝试了像

这样的查询
update tab1 
set refer = (select col2 from tab1 where col1 = refer) 
where col1 = 2

但这不起作用。

我也试过

update tab1 
set refer = (select tem1.col2 
             from tab1 tem1, tab1 tem2 
             where tem1.col1 = tem2.refer and tem2.col1=2) 
where col1 = 2

这很有效。

但我不确定这是否是正确的做法。

Expected

2 个答案:

答案 0 :(得分:0)

期待您的代码,您需要

   update tab1 
   set refer = col2  
   when col1 = refer 
   and col1 = 2 

这意味着

   update tab1 
   set refer = col2  
   when  refer  2 

oherwise fi yoru正在寻找带有子查询的同一个表的更新,您应该使用内连接

在mysql中

 update tab1 
 INNER JOIN (
      select col1, col2 
      from tab1 
      where col1 = refer ) t t.col1 = tabl1.col1 and  col1 = 2
在sqllite中你可以使用

  update tab1 
  set refer = (select t.col2 from (
  select col2 from tab1 where col1 = refer
  ) t )
  where col1 = 2

答案 1 :(得分:0)

最后这个查询完美无缺:

update tab1 
set refer = (select t1.col2 from tab1 as t1 where t1.col1 = tab1.refer) 
where tab1.col1 = 2