如何在表中查找值并在同一个表中插入查找结果?

时间:2011-08-05 16:17:12

标签: sql sql-server sql-server-2008

我从CSV文件创建了一个表。尽管该表包含了此项目可能需要的所有数据,但结果表未进行规范化。我的任务是清理和规范化这个表。

  1. 给定TableA中的字段值Value1,如何在TableB中查找该值并将TableB中的PK放在TableA的FK列中?

  2. 与问题1异常相同我需要查找多个列。给定TableA中的字段值Value1和Value2,如何在TableB中查找该组合并将Table From中的PK放在TableA的FK列中?

4 个答案:

答案 0 :(得分:3)

这适用于#1:

UPDATE TableA
SET FKColumn = b.PKColumn
FROM TableA as a
INNER JOIN TableB as b
ON a.Value1 = b.Value1

对于#2:

UPDATE TableA
SET FKColumn = b.PKColumn
FROM TableA as a
INNER JOIN TableB as b
ON a.Value1 = b.Value1 AND a.Value2 = b.Value2

答案 1 :(得分:0)

UPDATE TableA SET FKColumn = TableB.PKColumn
FROM TableB
WHERE TableA.Value1 = TableB.Value1

UPDATE TableA SET FKColumn = TableB.PKColumn
FROM TableB
WHERE TableA.Value1 = TableB.Value1 AND TableA.Value2 = TableB.Value2

答案 2 :(得分:0)

UPDATE TableA a 
SET a.fk_col = (select b.pk_col 
                from TableB b 
                where b.value = a.value);

UPDATE TableA a 
SET a.fk_col = (select b.pk_col 
                from TableB b 
                where b.value = a.value1 
                and b.value = a.value2);

答案 3 :(得分:0)

逻辑上,它应该是这样的:

UPDATE TableA
   SET FK_col = 
       (SELECT PK_col
          FROM TableB
         WHERE TableB.TableA_field = TableA.field)
 WHERE <your filter criteria on TableA>

但是,至少在MySQL中,在某些情况下,你不能在像这样的子查询中直接引用TableA,但这可以根据具体情况以不同的方式解决。我不确定这是否适用于SQL Server - 从未触及它。

编辑:我认为在此期间发布的其他答案可能比我的更好! ;)