我从CSV文件创建了一个表。尽管该表包含了此项目可能需要的所有数据,但结果表未进行规范化。我的任务是清理和规范化这个表。
给定TableA中的字段值Value1,如何在TableB中查找该值并将TableB中的PK放在TableA的FK列中?
与问题1异常相同我需要查找多个列。给定TableA中的字段值Value1和Value2,如何在TableB中查找该组合并将Table From中的PK放在TableA的FK列中?
答案 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 - 从未触及它。
编辑:我认为在此期间发布的其他答案可能比我的更好! ;)