2016-03-02 26 views
3

中的數據我有這個select語句,我想要在結果集中顯示找到並找不到... 我的查詢只給出了存在於D B。 如何添加未找到。 示例:SQL如何找到不在表

5647994 1234 Data exist in table 
5651061 8976 Data exist in table 
5823683 null Data not exist in table 
6115602 null Data not exist in table 

SELECT * 
FROM Carrier c 
WHERE (SUBSTRING(c.SrcFileName, 14, 7) in (
'5647994', 
'5651061', 
'5823683', 
'6115602', 
'6125795', 
'6140114', 
'6144781', 
'6155133') 
+0

您可以使用'NOT IN'來使用'IN'。如果你正在使用'JOIN','LEFT JOIN'會給你兩個。我們需要查看你的表定義以及你的SQL是什麼......'是這個Microsoft SQL Server' – logixologist

+0

左外連接的子查詢將幫助你 –

+0

請閱讀[** How-to-Ask **](http ://stackoverflow.com/help/how-to-ask) \t \t這裏是[** START **]的好地方(http://spaghettidba.com/2015/04/24/how-發佈在SQL問題的公共論壇/),以瞭解如何提高您的問題質量並獲得更好的答案。 –

回答

1

根據附加信息更新。

If(OBJECT_ID('tempdb..#TempSrcFileName') Is Not Null) Drop Table #TempSrcFileName 

CREATE TABLE #TempSrcFileName 
(
    src_file_name nchar(7) 
) 

INSERT INTO #TempSrcFileName (src_file_name) 
VALUES 
    ('5647994') 
    , ('5651061') 
    , ('5823683') 
    , ('6115602') 
    , ('6125795') 
    , ('6140114') 
    , ('6144781') 
    , ('6155133') 
; 

SELECT 
    t.src_file_name 
    , 'Found' AS [Status] 
FROM #TempSrcFileName t 
    LEFT JOIN Carrier c ON SUBSTRING(c.SrcFileName, 14, 7) = t.src_file_name 
WHERE (SUBSTRING(c.SrcFileName, 14, 7) IS NOT NULL) 
UNION SELECT 
    t.src_file_name 
    , 'Not Found' AS [Status] 
FROM #TempSrcFileName t 
    LEFT JOIN Carrier c ON SUBSTRING(c.SrcFileName, 14, 7) = t.src_file_name 
WHERE (SUBSTRING(c.SrcFileName, 14, 7) IS NULL) 
+1

這似乎是明顯的答案,但我認爲這是錯誤的。第二部分將給你表中所有不在'in'中的值,但是Samant想要檢查'in'中的值......難以用詞表示。 – maraca

+0

真棒謝謝你們。我會馬上嘗試 –

+0

馬拉卡,是的,你是對的。我想檢查的值是在給定的集合中。 ONLY'5647994','5651061','5823683','6115602','6125795','6140114','6144781','6155133'。如果發現這些,則「找到」,否則「未找到」 –

3

試試這個:

SELECT t1.val, 
     IF (t2.id IS NULL, 'NOT FOUND', 'FOUND'), 
     t2.* 
FROM (
    SELECT '5647994' AS val UNION ALL SELECT '5651061' UNION ALL 
    SELECT '5823683' UNION ALL SELECT '6115602' UNION ALL 
    SELECT '6125795' UNION ALL SELECT '6140114' UNION ALL 
    SELECT '6144781' UNION ALL SELECT '6155133') AS t1 
LEFT JOIN Carrier AS t2 ON t1.val = SUBSTRING(t2.SrcFileName, 14, 7) 

的想法是創建一個在線表格包含了所有待查值。如果我們將LEFT JOIN的原始表格添加到此內嵌表格中,則返回所有值。

以上查詢假設idCarrier表的字段。檢查此字段是否爲NULL/NOT NULL值分別標識未找到/找到的值。