我们有2个表TableA
和TableB
。我们在两个表中都有用户名作为公共列。我需要将表B中的数据导入表A,其中用户名相同
我们在表B中有超过10000条记录包含所有详细信息但我们在表A中只有用户名列。我需要通过复制表A中的其余列(用户ID,用户全名,电子邮件)来更新表B.
我们怎么做?请帮忙
答案 0 :(得分:1)
这可以让你得到你想要的东西......
IF OBJECT_ID('tempdb..#TableA', 'U') IS NOT NULL
DROP TABLE #TableA;
CREATE TABLE #TableA (
UserID INT,
FullName VARCHAR(20),
Email VARCHAR(30)
);
IF OBJECT_ID('tempdb..#TableB', 'U') IS NOT NULL
DROP TABLE #TableB;
CREATE TABLE #TableB (
UserID INT,
FullName VARCHAR(20),
Email VARCHAR(30)
);
INSERT #TableA ( UserID, FullName, Email ) VALUES
(1, 'Jane Doe', 'jd@Gmail.com'),
(2, 'John Doe', 'John_doe@yahoo.com'),
(3, 'Someone Else', 's.Else@hotmail.com');
INSERT #TableB (UserID) VALUES
(1), (2), (3);
-- check the begin values in both tables...
SELECT * FROM #TableA ta;
SELECT * FROM #TableB tb;
--============================================
UPDATE tb SET
tb.UserID = ta.UserID,
tb.FullName = ta.FullName,
tb.Email = ta.Email
FROM
#TableB tb
JOIN #TableA ta
ON tb.UserID = ta.UserID;
-- check the end values in both tables...
SELECT * FROM #TableA ta;
SELECT * FROM #TableB tb;
HTH, 杰森
答案 1 :(得分:0)
您可以使用的另一个SQL工具是MERGE
--Create first table
CREATE TABLE #aa(
username varchar(50),
userid varchar(50),
userfullname varchar(50),
useremail varchar(50)
)
GO
--Create second table
CREATE TABLE #bb(
username varchar(50),
userid varchar(50),
userfullname varchar(50),
useremail varchar(50)
)
GO
--Insert all data into temp table #aa
INSERT #aa (username,userid,userfullname,useremail)
VALUES
('AAA','ID1','JOHN DOE','AAA@YAHOO.COM'),
('BBB','ID2','BILLY BOB','BBB@YAHOO.COM'),
('CCC','ID3','TOM HANKS','CCC@GMAIL.COM'),
('DDD','ID4','CONNOR MCGREGOR','DDD@GMAIL.COM'),
('EEE','ID5','FLOYD MAYWEATHER','EEE@GMAIL.COM')
GO
--Insert only the username in temp table #bb
INSERT #bb (username)
VALUES
('AAA'),
('BBB'),
('CCC'),
('DDD'),
('EEE')
GO
--See #bb before
SELECT * FROM #bb
MERGE #bb AS TARGET
USING #aa AS SOURCE
ON TARGET.username = SOURCE.username
WHEN MATCHED
THEN UPDATE SET
TARGET.userid = SOURCE.userid,
TARGET.userfullname = SOURCE.userfullname,
TARGET.useremail = SOURCE.useremail;
GO
--See #bb after
SELECT * FROM #bb
DROP TABLE #aa
DROP TABLE #bb
合并前
+----------+--------+--------------+-----------+
| username | userid | userfullname | useremail |
+----------+--------+--------------+-----------+
| AAA | NULL | NULL | NULL |
| BBB | NULL | NULL | NULL |
| CCC | NULL | NULL | NULL |
| DDD | NULL | NULL | NULL |
| EEE | NULL | NULL | NULL |
+----------+--------+--------------+-----------+
合并后
+----------+--------+-------------------+----------------+
| username | userid | userfullname | useremail |
+----------+--------+-------------------+----------------+
| AAA | ID1 | JOHN DOE | AAA@YAHOO.COM |
| BBB | ID2 | BILLY BOB | BBB@YAHOO.COM |
| CCC | ID3 | TOM HANKS | CCC@GMAIL.COM |
| DDD | ID4 | CONNOR MCGREGOR | DDD@GMAIL.COM |
| EEE | ID5 | FLOYD MAYWEATHER | EEE@GMAIL.COM |
+----------+--------+-------------------+----------------+