Вам нужно построить "таблицу" со списком имен. Это единственный способ вернуть их в результирующий набор.
Если ваши базы данных поддерживают конструктор values()
, я бы рекомендовал:
SELECT u.UserName, p.Location
FROM (VALUES ('Nick'), ('Jack'), ('Robert') ) v(UserName) LEFT JOIN
People_DB p
ON p.UserName = v.UserName;
Должен отметить, что альтернативные решения доступны почти в любой базе данных, которая не поддерживает VALUES
. Например:
SELECT u.UserName, p.Location
FROM (SELECT 'Nick' as UserName UNION ALL
SELECT 'Jack' UNION ALL
SELECT 'Robert'
) v LEFT JOIN
People_DB p
ON p.UserName = v.UserName;
Местоположение NULL
, вероятно, является достаточным признаком того, что имя не найдено. Если вам нужен настоящий флаг, вы можете использовать CASE
:
SELECT u.UserName, p.Location,
(CASE WHEN p.UserName IS NULL THEN 0 ELSE 1 END) as in_list_flag
FROM (VALUES ('Nick'), ('Jack'), ('Robert') v(UserName) LEFT JOIN
People_DB p
ON p.UserName = v.UserName;
Отметьте свой вопрос с помощью базы данных, которую вы используете.