Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在表中查找值并在同一个表中插入查找结果?_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

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

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

我从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 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>