在SQL Server 2008中,我有包含这些记录的表,
Name
----
John
Amy
Peter
Jack
Alan
Linda
我有另一个用户列表('John','Adam','Amy','Frank') 如何在不创建临时表的情况下检查列表中的哪个用户是否在表中
预期输出表
Name Available
---- ---------
John John
Adam Null
Amy Amy
Frank Null
答案 0 :(得分:3)
你应该只需要在两张桌子上进行左(或右)连接,例如:
select n.name, u.name
from names n
left join users u on n.name=u.name
答案 1 :(得分:2)
您可以执行以下操作:
CREATE TABLE #tmpNames (UserName varchar(10));
INSERT INTO #tmpNames
VALUES ('John'), ('Adam'), ('Amy'), ('Frank');
SELECT t.UserName AS Name, myTable.Name AS Available
FROM #tmpNames t
LEFT OUTER JOIN myTable m ON t.UserName = m.name
编辑:解决方案假定表格和列表中的名称是唯一的;否则,结果中可能存在重复的行。
答案 2 :(得分:2)
假设您使用的是SQL Server 2008,则可以使用行构造函数来避免显式创建临时表。
如果基表中可能存在重复的名称,则使用EXISTS
而不是OUTER JOIN
可能会更有效(一旦找到名称的第一个匹配记录,它就可以停止搜索)。
SELECT name,
CASE
WHEN EXISTS
(SELECT *
FROM yourtable t
WHERE t.name = names.name
)
THEN names.name
END AS Available
FROM (VALUES
('John'), ( 'Adam'),( 'Amy'), ('Frank') ) names (name)