检查列表中的值是否可用以及可用值

时间:2010-11-29 22:13:39

标签: sql-server tsql

在SQL Server 2008中,我有包含这些记录的表,

Name
----
John
Amy
Peter
Jack
Alan
Linda

我有另一个用户列表('John','Adam','Amy','Frank') 如何在不创建临时表的情况下检查列表中的哪个用户是否在表中

预期输出表

Name   Available
----   ---------
John   John
Adam   Null
Amy    Amy
Frank  Null

3 个答案:

答案 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)