0

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

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

IE

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 应该有零个重复值。

4

2 回答 2

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;
于 2012-06-30T18:21:53.903 回答
0

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

于 2012-06-30T18:31:55.967 回答