比较两个表和输出差异 - T-SQL

时间:2016-04-15 07:05:00

标签: tsql

我有两个表格如下所示

表A

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

表B

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

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

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

类似于excel中的VLOOKUP。

你能帮忙实现这个目标吗?提前致谢。

2 个答案:

答案 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','jimh@dundermifflin.com'),
('Pam','Beasley-Halpert','pamb@dundermifflin.com'),
('Michael','Scott','michaels@dundermifflin.com'),
('Toby','Flenderson','tobyf@dundermifflin.com')

INSERT INTO @TableB (leavedate, email) VALUES
    ('2010-05-04','tobyf@dundermifflin.com'),
    ('2008-03-14','rogerb@dundermifflin.com')

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

答案 1 :(得分:0)

您可以执行类似(未经测试)的操作:

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

这应该可以按预期工作。

至少它对应于Excel< VLOOKUP

的行为
相关问题