2016-04-25 95 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