Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 server 基于另一个表数据更新一个表中的数据_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server 基于另一个表数据更新一个表中的数据

Sql server 基于另一个表数据更新一个表中的数据,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我有如下表A和表B。两者都有帐号和ID。 我想从表A中找出表B中账号的ID,并用表A中的ID值更新表B。我想使表A看起来像表B。如何实现这一点 我试过了 select distinct A.ID,A.ACCTNO,B.ACCTNO from TableA as A inner join TableB as B on A.ACCTNO = B.ACCTNO 我的输出应该是: 使用带更新的连接 质疑 更新 用于填充空行 质疑 基于联接的更新。。。您还可以忽略ACCTNO中的null以获得更好的

我有如下表A和表B。两者都有帐号和ID。 我想从表A中找出表B中账号的ID,并用表A中的ID值更新表B。我想使表A看起来像表B。如何实现这一点

我试过了

select distinct  A.ID,A.ACCTNO,B.ACCTNO from  TableA as A
inner join TableB as B on A.ACCTNO = B.ACCTNO
我的输出应该是:

使用带更新的连接

质疑

更新

用于填充空行

质疑


基于联接的更新。。。您还可以忽略ACCTNO中的null以获得更好的性能

update B
set B.ID=A.ID
from TableB as B
join TableA as A
on  A.ACCTNO = B.ACCTNO
where B.ACCTNO is not null;
使用此查询:-


您需要将这两个查询运行到所需的输出

INSERT INTO TableB (ID,ACCTNO)
SELECT 
a.ID,
a.ACCTNO 
FROM TableA as a
LEFT JOIN TableB as b on a.ACCTNO = b.ACCTNO
WHERE b.ACCTNO IS NULL;

用CTE

WITH CTE
     AS (SELECT T1.ID AS TABLEA_ID,
                T1.ACCTNO  AS TABLEA_ACCID,
                T2.ID AS TABLEB_ID,
                T2.ACCTNO   AS TANLEB_ACCID
         FROM   TableA T1
                INNER JOIN TableB T2
                  ON T1.ACCTNO= T2.ACCTNO)
UPDATE CTE
SET    TABLEA_ID= TABLEB_ID
希望它的工作


快乐编码

以下SQL将使用acctno匹配的表A中的ID填充表B:

UPDATE table_b
SET ID=table_a.id
FROM table_b
INNER JOIN table_a on table_b.acctno=table_a.acctno

那么这两个空列值呢?您期望的输出是什么。??我可以暂时忽略ACCTNO中的空值。但我想从表A中填写对应于ACCTNO的表B中的ID。
INSERT INTO TableB (ID,ACCTNO)
SELECT 
a.ID,
a.ACCTNO 
FROM TableA as a
LEFT JOIN TableB as b on a.ACCTNO = b.ACCTNO
WHERE b.ACCTNO IS NULL;
update b set b.ID = a.ID 
from TableB as b 
left join TableA as a ON a.ACCTNO = b.ACCTNO 
where b.ACCTNO IS NOT null;
WITH CTE
     AS (SELECT T1.ID AS TABLEA_ID,
                T1.ACCTNO  AS TABLEA_ACCID,
                T2.ID AS TABLEB_ID,
                T2.ACCTNO   AS TANLEB_ACCID
         FROM   TableA T1
                INNER JOIN TableB T2
                  ON T1.ACCTNO= T2.ACCTNO)
UPDATE CTE
SET    TABLEA_ID= TABLEB_ID
UPDATE table_b
SET ID=table_a.id
FROM table_b
INNER JOIN table_a on table_b.acctno=table_a.acctno