1

我正在尝试将 SQL Server 2005 中的一个字段从一个表更新到另一个表中的另一个字段,并且我完全违反了 UNIQUE KEY 约束,我似乎无法弄清楚我的脚本哪里出了问题. 这是我到目前为止所拥有的:

UPDATE table1
SET column1 = (SELECT table2.column2
FROM         table2 INNER JOIN
                  table1 ON table1.id = table2.id)

我对 SQL 很陌生,并且肯定会喜欢有关这种情况的一些输入。非常感谢!

4

1 回答 1

4

这种语法看起来更简洁一些,但您需要验证 table2.column2 中的值是否唯一。

UPDATE t1 
  SET column1 = t2.column2
    FROM dbo.table1 AS t1
    INNER JOIN dbo.table2 AS t2
    ON t1.id = t2.id;

假设 table1.column1 具有唯一约束,并且该 id 是每个表中的主键,您可以先检查潜在的违规行为。这将告诉您源表的 column2 中是否存在欺骗:

SELECT column2
  FROM dbo.table2
  WHERE id IN (SELECT id FROM dbo.table1)
  GROUP BY column2
  HAVING COUNT(column2) > 1;

这将告诉您 table2 中是否存在与两个表之间不常见的其他行冲突的单个值:

SELECT t2.column2
  FROM dbo.table2 AS t2
  WHERE EXISTS (SELECT 1 FROM dbo.table1 AS t1
    WHERE t1.column1 = t2.column2
    AND t2.id <> t1.id);
于 2012-08-07T17:55:01.450 回答