由于基于另一个字段的子查询,更新字段

时间:2010-06-15 10:56:44

标签: mysql sql subquery sql-update field

我使用MySQL数据库,我想基于另一个更新表中的字段。类似的东西:

UPDATE table1
SET field1 = table2.id
WHERE field2 IN (
    SELECT table2.name
    FROM table2
    );

我知道这个查询不起作用,但这是一个想法。这甚至可以吗?

1 个答案:

答案 0 :(得分:3)

您可以使用相关子查询,如下所示。这假设将返回一个匹配值。如果返回多个匹配值,则会引发错误;如果返回零,则将字段设置为null。如果不希望最后一个行为,则需要where子句。

UPDATE table1
SET field1 = (SELECT DISTINCT table2.ValueColumn 
              FROM table2 
              WHERE table2.JoinColumn = table1.JoinColumn)

修改

要查看0或1个以上匹配的记录,您可以使用

SELECT table1.JoinColumn, COUNT(DISTINCT table2.ValueColumn)
FROM table1 
LEFT JOIN table2
ON table2.JoinColumn = table1.JoinColumn
GROUP BY table1.JoinColumn
HAVING COUNT(DISTINCT table2.ValueColumn) <> 1