2017-11-10 176 views
0

我正在尝试更新表中空白处的一些代码。我的临时表中有所有的代码,我试图加入身份证号码。我相信我得到无效的标识符变量,因为我在加入表之前从我的临时表中声明变量,但我尝试了一些变化,并且似乎无法使其工作。这是我到目前为止。我意识到这是新手,但我卡住了。更新中的无效标识符

UPDATE table_1 t1 
SET t1.code = t2.code 
WHERE EXISTS (SELECT 1 FROM table_2 t2 
         WHERE t2.id_number = t1.id_number 
         AND t1.code = ' ') 

回答

-1
UPDATE table_1 t1 
SET t1.code = t2.code 
WHERE EXISTS (SELECT 1 FROM table_2 t2 WHERE t2.id_number = 
**t1_id_number** AND t1.code = ' ') 

变化t1_id_number 到t1.id_number

+0

您将得到与OP相同的错误:名称't2'仅在where子句中的子查询中可见,它在'set'子句中不可见。 – mathguy

0

一个在甲骨文的方法是使用merge,但你可以用update也这么做:

UPDATE table_1 t1 
    SET t1.code = (SELECT t2.code 
        FROM table_2 t2 
        WHERE t2.id_number = t1.id_number 
       ) 
WHERE (t1.code = ' ' OR t1.code IS NULL) AND 
     EXISTS (SELECT 1 
       FROM table_2 t2 
       WHERE t2.id_number = t1.id_number 
      ); 

备注:

  • t2SET中没有被理解,因为它从未被定义过。
  • t1.code上的条件应该直接在WHERE中,而不是在子查询中 - 条件确实与子查询无关。
  • 我添加了NULL支票以及空格检查。
  • 我相信你想要t1.id_number而不是t1_id_number