Sql server 不存在多个列

Sql server 不存在多个列,sql-server,tsql,Sql Server,Tsql,我正在编写一个查询,该查询将根据加载日期读取一个表中的数据。主要的过程是检查从最近的加载日期到整个表的历史记录是否添加了任何内容。我遇到的问题是对多个列使用“notexists”语句时。它检查指定的列是否单独存在,而不是作为一组列存在。正如下面代码中所列,SQL正在检查表之间是否不存在姓氏、名和中间名,而不是全部,就像在第二个查询中使用“OR”而不是“and”。有什么建议吗,还是我应该走另一条路 SELECT DISTINCT [Last Name] , [Fir

我正在编写一个查询,该查询将根据加载日期读取一个表中的数据。主要的过程是检查从最近的加载日期到整个表的历史记录是否添加了任何内容。我遇到的问题是对多个列使用“notexists”语句时。它检查指定的列是否单独存在,而不是作为一组列存在。正如下面代码中所列,SQL正在检查表之间是否不存在姓氏、名和中间名,而不是全部,就像在第二个查询中使用“OR”而不是“and”。有什么建议吗,还是我应该走另一条路

SELECT DISTINCT
        [Last Name] ,
        [First Name] ,
        [Middle Name]
INTO    #B
FROM    A
WHERE   Load_Date = ( SELECT    MAX(Load_Date)
                      FROM      A
                    )

SELECT DISTINCT
        [Last Name] ,
        [First Name] ,
        [Middle Name]
FROM    A
WHERE   NOT EXISTS ( SELECT [Last Name] ,
                            [First Name] ,
                            [Middle Name]
                     FROM   #B B
                     WHERE  A.[Last Name] = B.[Last Name]
                            AND A.[First Name] = B.[First Name]
                            AND A.[Middle Name] = B.[Middle Name] )
        AND Load_Date <> ( SELECT   MAX(Load_Date)
                           FROM     A
                         )

您似乎希望获得上次加载中没有的名称组合。以下是一种更简单的方法:

Select [Last Name], [First Name], [Middle Name]
from A
group by [Last Name], [First Name], [Middle Name]
having max(Load_Date) < (Select Max(Load_Date) From A);
您的查询应该有效。我认为您误解了not exists的工作原理。

not exists不关心您实际选择的内容,它只关心是否返回了行。所以实际上,您可以将其更改为选择NULL,而不会更改任何内容
SELECT [Last Name], [First Name], [Middle Name]
FROM A
WHERE [Load_Date] = (SELECT MAX([Load_Date]) From A)
EXCEPT
SELECT [Last Name], [First Name], [Middle Name]
FROM A
WHERE [Load_Date] <> (SELECT MAX([Load_Date]) From A)