Проверьте, доступно ли значение в списке или нет вместе с доступным значением - PullRequest
1 голос
/ 30 ноября 2010

В SQL Server 2008 у меня есть таблица с такими записями:

Name
----
John
Amy
Peter
Jack
Alan
Linda

У меня есть другой список пользователей («Джон», «Адам», «Эми», «Фрэнк»).Я проверяю, какой пользователь в списке находится в таблице, а не без создания временной таблицы

Ожидаемая таблица вывода

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

Ответы [ 3 ]

3 голосов
/ 30 ноября 2010

Вам просто нужно левое (или правое) соединение на ваших двух столах, что-то вроде:

select n.name, u.name
from names n
  left join users u on n.name=u.name
2 голосов
/ 30 ноября 2010

Если вы работаете в 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)
2 голосов
/ 30 ноября 2010

Вы можете сделать следующее:

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

Редактировать: решение предполагает, что имена в таблице и списке являются уникальными;в противном случае в результатах могут быть повторяющиеся строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...