无法在关键字'LEFT'附近找出错误的语法

时间:2018-02-23 15:09:38

标签: sql-server syntax-error

我正在使用我目前正在处理的SQL查询。如果这是一个简单的解决方案,我仍在学习SQL,所以道歉。我在第二次LEFT JOIN上遇到语法错误,对于我的生活,我无法弄清楚原因。

Bundle

2 个答案:

答案 0 :(得分:2)

将您的LEFT JOIN移到WHERE子句之上,如下所示。在WHERE子句之后,您应该看到的唯一事情是GROUP BYORDER BY子句。

SELECT DISTINCT ci.CatalogItemID AS EID
FROM LodgingCatalogMaster.[dbo].[CatalogItem] ci
LEFT JOIN LodgingCatalogMaster.[dbo].[CatalogItemAttribute] cia
        ON ci.catalogitemid = cia.catalogitemid
LEFT JOIN LodgingCatalogMaster.[dbo].[SKUGroupBusinessModel] skugbm
        ON ci.catalogitemid = skugbm.SkuGroupCatalogItemID
WHERE ci.[TableTypeID] = 1 
AND ci.catalogitemid NOT IN (
               SELECT cia.CatalogItemID
               FROM LodgingCatalogMaster.[dbo].[CatalogItemAttribute] cia
               WHERE cia.attributeID in (2001, 361, 1073742653)
               )
    AND ci.TableTypeID = 1
    AND ci.CatalogItemStatusTypeID = 1
    AND (skugbm.MerchantContract = 1 OR skugbm.DirectAgencyContract = 1);

答案 1 :(得分:0)

我会将您的WHERE个陈述更改为AND。由于您已经离开了联接,WHERE子句可以有效地将它们更改为INNER JOINS。

SELECT DISTINCT ci.CatalogItemID AS EID FROM LodgingCatalogMaster.[dbo].[CatalogItem] ci

LEFT JOIN LodgingCatalogMaster.[dbo].[CatalogItemAttribute] cia
        ON ci.catalogitemid = cia.catalogitemid AND ci.[TableTypeID] = 1  AND ci.catalogitemid NOT IN (
               SELECT cia.CatalogItemID
               FROM LodgingCatalogMaster.[dbo].[CatalogItemAttribute] cia
               WHERE cia.attributeID in (2001, 361, 1073742653)
               )
    AND ci.TableTypeID = 1
    AND ci.CatalogItemStatusTypeID = 1

LEFT JOIN LodgingCatalogMaster.[dbo].[SKUGroupBusinessModel] skugbm ON ci.catalogitemid = skugbm.SkuGroupCatalogItemID AND skugbm.MerchantContract = 1 OR skugbm.DirectAgencyContract = 1;