MySQL如何根据现有值更新行

时间:2012-06-30 18:07:47

标签: mysql sql

我正在规范现有数据库。我目前在Table1中有两列,域和容器,具有有限的不同组合(目前约有30个组合来自~1000个记录)。我已经构建了一个新的Table2,它包含所有组合,并在安装新记录时自动生成主键(container_id)。我已经向Table1添加了一个container_id列,并希望根据Table1.container列填充值。

此时,表2中的所有容器名称都是不同的,但将来可能会发生变化,因此需要一个唯一的数字作为PK。

UPDATE Table1   
SET container_id = (SELECT Table2.container_id
    FROM Table2
    WHERE Table2.container = Table1.container)
WHERE EXISTS
  ( SELECT Table2.container_id
    FROM Table2
    WHERE Table2.container = Table1.container)

此查询返回error 1242: subquery returns more than one row. 我咆哮着完全错误的树吗?表2应该有零重复值。

2 个答案:

答案 0 :(得分:0)

我应该使用连接来更新table1

UPDATE Table1 
LEFT JOIN Table2 USING (container) 
SET Table1.contanier_id = Table2.contanier_id
WHERE Table1.contanier_id IS NULL AND Table2.contanier_id IS NOT NULL;

答案 1 :(得分:0)

Table2.container不是唯一的,因此可以重复。因此,两个子查询都返回多行。