我有一个SQL语句,它在数据库中搜索一些记录。
SELECT UserName
, Location
FROM People_DB
WHERE UserName IN ('Nick', 'Jack', 'Robert')
前两个名字('Nick','Jack')存在于People_DB中,我的查询返回该信息但是它不返回'Robert',因为它在我的数据库中不存在。
有没有办法在查询结果集中返回'Robert不在People_DB中'?
答案 0 :(得分:0)
没有直接的做法。
你可以使用这样的东西
drop table #temp
select 'Nick' as UserName into #temp
union select 'Jack'
union select 'Robert'
SELECT t.UserName,isnull(b.UserName,'Doesn''t exists',b.Location
FROM #temp t
left join People_DB b on t.UserName = b.UserName
WHERE b.UserName IN ('Nick', 'Jack', 'Robert')
答案 1 :(得分:0)
你需要构建一个"表"列表名称。这是将它们放回结果集的唯一方法。
如果您的数据库支持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;