2016-04-15 67 views
0

我已经展示了下面比较两个表与输出差分 - T-SQL

表A

+-------+-------+-------+ 
| fname | lname | email | 
+-------+-------+-------+ 

表B

+-----------+-------+ 
| leavedate | email | 
+-----------+-------+ 

我需要匹配表中的电子邮件两个表,并使用T-SQL输出下表:

+-------+-------+-------+------------+ 
| fname | lname | email | leavedate | 
+-------+-------+-------+------------+ 

与excel中的VLOOKUP类似。

您能否帮助实现这一目标?提前致谢。

回答

0

你可以这样做(未经测试):

SELECT * 
FROM TABLE_A TA 
LEFT JOIN TABLE_B TB ON TA.email = TB.email 

像您期望这应该工作。

至少它对应Excel的VLOOKUP

+0

这就是我需要:)非常感谢! –

1

供参考的缘故的行为,我想指出的是,这取决于两个表是否不完全匹配。此代码显示了处理这些情况的不同方式。有更好的例子(我特别喜欢那些维恩图),但这些可能有助于目前的情况:

DECLARE @TableA TABLE (fname NVARCHAR(20), lname NVARCHAR(20), email NVARCHAR(30)) 
DECLARE @TableB TABLE (leavedate DATE, email NVARCHAR(30)) 

INSERT INTO @TableA (fname, lname, email) VALUES 
('Jim','Halpert','[email protected]'), 
('Pam','Beasley-Halpert','[email protected]'), 
('Michael','Scott','[email protected]'), 
('Toby','Flenderson','[email protected]') 

INSERT INTO @TableB (leavedate, email) VALUES 
    ('2010-05-04','[email protected]'), 
    ('2008-03-14','[email protected]') 

SELECT ta.*, tb.leavedate 
    FROM @TableA ta 
     LEFT JOIN @TableB tb 
      ON ta.email = tb.email 

SELECT ta.fname, ta.lname, tb.email, tb.leavedate 
    FROM @TableA ta 
     RIGHT JOIN @TableB tb 
      ON ta.email = tb.email 

SELECT ta.fname, ta.lname, COALESCE(ta.email,tb.email,''), tb.leavedate 
    FROM @TableA ta 
     FULL JOIN @TableB tb 
      ON ta.email = tb.email 
+0

感谢这:) –