我有两个表格如下所示
表A
+-------+-------+-------+
| fname | lname | email |
+-------+-------+-------+
表B
+-----------+-------+
| leavedate | email |
+-----------+-------+
我需要匹配表中的电子邮件,并使用T-SQL输出下表:
+-------+-------+-------+------------+
| fname | lname | email | leavedate |
+-------+-------+-------+------------+
类似于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','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
的行为