参考subselect中的外部字段值?

时间:2010-11-03 20:22:16

标签: sql mysql database

我想进行查询以更新我忘​​记在批量插入中复制的值。但是我不确定如何表达它。

UPDATE table 
   SET text_field_1 = (SELECT text_field_2 
                         FROM other_table 
                        WHERE id = **current row in update statement, outside parens**.id )

我该怎么做?这似乎是递归的工作。

4 个答案:

答案 0 :(得分:2)

使用:

UPDATE YOUR_TABLE
   SET text_field_1 = (SELECT t.text_field_2 
                         FROM other_table t
                        WHERE t.id = YOUR_TABLE.id)

警告

如果other_table中没有支持记录,则text_field_1将设置为NULL。

说明

在标准SQL中,您不能在为UPDATE(或DELETE)语句定义的表上具有表别名,因此您需要使用完整表名来指示列的来源。

它被称为相关子查询 - 相关性是外部查询对表进行评估的原因。

澄清

MySQL(和SQL Server)支持UPDATE和DELETE语句中的表别名,以及JOIN语法:

UPDATE YOUR_TABLE a
  JOIN OTHER_TABLE b ON b.id = a.id
   SET a.text_field_1 = b.text_field_2 

...与提供的查询不同,因为只会更新匹配的行 - 那些不匹配的行,其text_field_1值将保持不变。这相当于提供的查询:

   UPDATE YOUR_TABLE a
LEFT JOIN OTHER_TABLE b ON b.id = a.id
      SET a.text_field_1 = b.text_field_2 

答案 1 :(得分:0)

试试这个:

UPDATE table 
SET text_field_1 = (SELECT text_field_2 
FROM other_table 
WHERE id = table.id )

答案 2 :(得分:0)

如果有一个ID字段:

UPDATE updtable t1
  SET t1.text_field_1 = (
    SELECT t2.text_field_2
    FROM seltable t2
    WHERE t1.ID = t2.ID
  )
; 

答案 3 :(得分:0)

UPDATE Table1, Tabl2
SET Table1.myField = Table2.SomeField
WHERE Table1.ID = Table2.ID

注意:我没试过。
这只会更新ID匹配的记录。