查找缺少行的SQL查询返回语法错误

时间:2016-02-23 07:57:41

标签: sql sql-server sql-server-2008 ms-access join

我尝试从两个向量中过滤缺失值。我尝试比较两个单独工作的查询。然而,当把它们放在一起时,我似乎错过了一些东西:

SELECT ID_Name FROM [000_Skalar_Daten] 
 WHERE VertragsPool       = 'Bestand' 
   AND Bilanzstichtag       = '20151231' 
   AND VR_Key               = '34' 
   AND Waehrung             = 'EUR' 
   AND SII_LINE_OF_BUSINESS = 'KLV' 
 WHERE ID_Name NOT IN (
      SELECT  distinct VD.ID_Name   
        FROM [000_Vektor_Daten] VD 
  INNER JOIN [000_Skalar_Daten] SD 
          ON VD.VertragsPool = SD.VertragsPool   
         AND VD.ID_Name = SD.ID_Name   
         AND VD.Bilanzstichtag = SD.Bilanzstichtag   
         AND VD.VR_Key = SD.VR_Key   
         AND VD.Waehrung  = SD.Waehrung   
       WHERE SD.VertragsPool       = 'Bestand' 
         AND SD.Bilanzstichtag       = '20151231' 
         AND SD.VR_Key               = '34' 
         AND SD.Waehrung             ='EUR' 
         AND SD.SII_LINE_OF_BUSINESS ='KLV'
    )

返回WHERE子句附近的语法错误。我的问题是如何重构查询以仅返回不在第二个查询部分中的值。也许通过MS Access中的 pass-through-query 将此查询传递给Microsoft SQL-Server是相关的。

非常感谢!

1 个答案:

答案 0 :(得分:3)

评论中已经提到了错误的原因。以下是编写查询的更好方法,该查询处理来自NULL

Sub-Query
SELECT ID_Name
FROM   [000_Skalar_Daten] a
WHERE  VertragsPool = 'Bestand'
       AND Bilanzstichtag = '20151231'
       AND VR_Key = '34'
       AND Waehrung = 'EUR'
       AND SII_LINE_OF_BUSINESS = 'KLV'
       AND NOT EXISTS (SELECT 1
                       FROM   [000_Vektor_Daten] VD
                              INNER JOIN [000_Skalar_Daten] SD
                                      ON VD.VertragsPool = SD.VertragsPool
                                         AND VD.ID_Name = SD.ID_Name
                                         AND VD.Bilanzstichtag = SD.Bilanzstichtag
                                         AND VD.VR_Key = SD.VR_Key
                                         AND VD.Waehrung = SD.Waehrung
                       WHERE  SD.VertragsPool = 'Bestand'
                              AND SD.Bilanzstichtag = '20151231'
                              AND SD.VR_Key = '34'
                              AND SD.Waehrung = 'EUR'
                              AND SD.SII_LINE_OF_BUSINESS = 'KLV'
                              AND a.ID_Name = VD.ID_Name)