我想进行查询以更新我忘记在批量插入中复制的值。但是我不确定如何表达它。
UPDATE table
SET text_field_1 = (SELECT text_field_2
FROM other_table
WHERE id = **current row in update statement, outside parens**.id )
我该怎么做?这似乎是递归的工作。
答案 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匹配的记录。