2016-04-25 62 views
0

我必须为一组名称的名称和年龄搜索表(“NamesAges”)。问题是表中有成千上万的名字,我搜索的名字集有数百个,而且并非所有名字都在表中。我怎样才能得到一个明确的NULL条目为缺少的名字。带空项的SQL列表

具体做法是:

NamesAges 
========= 
Allan 44 
Brenda 33 
Carl 21 
Daniel 34 

组的名称==(艾伦,博尼塔,钱德拉,丹尼尔)

我可以做的:

SELECT Name, Age 
FROM [NamesAges] 
WHERE Names IN ('Allan', 'Bonita', 'Chandra', 'Daniel') 

,但我希望得到一些迹象表明,表中没有Bonita和Chandra。

+0

创建一个临时表,其中包含您正在搜索的所有名称。 'LEFT JOIN'' NameAges'到您的临时表。然后你会得到一个空的缺少的名字。 – SQLChao

+2

答案取决于你没有指定的数据库引擎。 –

+0

http://stackoverflow.com/q/36754896/330315 –

回答

1

一种方式做到这一点:

SELECT a.Name, b.Age, case when b.Name IS NULL THEN 'Missing' ELSE 'OK' End Status 
FROM (
    SELECT 'Allan' Name 
    UNION SELECT 'Bonita' 
    UNION SELECT 'Chandra' 
    UNION SELECT 'Daniel' 
) a 
LEFT JOIN [NamesAges] b ON b.Name = a.Name 
+0

感谢大家的有益回应。 – syzygy78

0

假设集名称在另一张表,你很可能在左的联接:

select s.name, n.age 
from set_of_names s 
     left join names_and_ages n on s.name = n.name 

这会给你的集名称的所有名称,与来自其他表随年龄如果它发现名称匹配(否则为空)。

-1

如果您正在使用一个表,使用不同的手柄第二表连接表的本身。这将工作,并将返回NULL为不在您提供的列表中的所有内容。如果您希望查询管理器显示NULL这个词,您可以修改设置来执行此操作,或者在没有任何内容返回时,您可以使用null作为选项编写CASE语句。

select na1.NAME 
from NamesAges na1 
    right join NamesAges na2 
      on na1.name = na2.NAME 
     and na2.NAME in ('Allan', 'Bonita', 'Chandra', 'Daniel') 
+0

将表加入表的目的是什么?这似乎是因为OP的查询不起作用的原因而失败。 – SQLnoob

+0

使用外连接来获取空字段。这似乎是最简单的方法。 – Karlomanio

+0

它什么时候会返回null?如果名字不在表格中,他们不会出现在结果中,这正是OP想要解决的问题。加入表格本身并不能解决这个问题。 – SQLnoob