【问题标题】:SQL How to find the Data which is not in tableSQL如何查找不在表中的数据
【发布时间】:2016-03-02 19:37:07
【问题描述】:

我有这个选择语句,我想在结果集中显示找到和未找到... 我的查询只给了我数据库中存在的任何(值)。 如何也添加未找到。 示例:

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')

【问题讨论】:

  • 您可以像使用IN 一样使用NOT IN。如果您使用的是JOIN,那么LEFT JOIN 将为您提供两者。我们需要查看您的表定义以及您的 SQL 是什么...is this Microsoft SQL Server
  • 子查询的左外连接会帮助你
  • 请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。
  • 感谢您的快速回复。是的,下次我将按照如何操作。对于那个很抱歉。是的,我使用的是 Microsoft SQL Server,你能给我举个 Left Join 的例子吗?

标签: sql sql-server


【解决方案1】:

试试这个:

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 值分别标识未找到/找到的值。

【讨论】:

    【解决方案2】:

    根据其他信息更新。

    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)
    

    【讨论】:

    • 这似乎是显而易见的答案,但我认为它是错误的。第二部分将为您提供表中所有不在in 中的值,但 Samant 想检查in 中的值...很难用语言表达。
    • 马拉卡,是的,你是对的。我要检查的值在给定集中。只有“5647994”、“5651061”、“5823683”、“6115602”、“6125795”、“6140114”、“6144781”、“6155133”。如果找到这些,则“找到”,否则“未找到”
    猜你喜欢
    • 1970-01-01
    • 2022-11-12
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 2014-11-11
    • 2013-10-29
    • 2020-08-31
    相关资源
    最近更新 更多