Sql 如何在表中查找值并在同一个表中插入查找结果?
我从CSV文件创建了一个表。尽管该表包含了我们在该项目中可能需要的所有数据,但结果表并没有规范化。我的任务是清理和规范这个表 给定TableA中的字段值Value1,如何在TableB中查找该值并将TableB中的PK放置在TableA中的FK列中 与问题1相同,我需要查找多个列。给定表a中的字段值Value1和Value2,如何在表B中查找该组合并将表B中的PK放置在表a中的FK列中Sql 如何在表中查找值并在同一个表中插入查找结果?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我从CSV文件创建了一个表。尽管该表包含了我们在该项目中可能需要的所有数据,但结果表并没有规范化。我的任务是清理和规范这个表 给定TableA中的字段值Value1,如何在TableB中查找该值并将TableB中的PK放置在TableA中的FK列中 与问题1相同,我需要查找多个列。给定表a中的字段值Value1和Value2,如何在表B中查找该组合并将表B中的PK放置在表a中的FK列中 这应该适用于1: UPDATE TableA SET FKColumn = b.PKColumn FROM T
这应该适用于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
及
从逻辑上讲,应该是这样的:
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-从未接触过它
编辑:我认为在此期间发布的其他答案可能比我的要好 非常好!稍微调整了set语句,否则会出现错误。
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);
UPDATE TableA
SET FK_col =
(SELECT PK_col
FROM TableB
WHERE TableB.TableA_field = TableA.field)
WHERE <your filter criteria on TableA>