我尝试从两个向量中过滤缺失值。我尝试比较两个单独工作的查询。然而,当把它们放在一起时,我似乎错过了一些东西:
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是相关的。
非常感谢!
答案 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)