我正在使用我目前正在处理的SQL查询。如果这是一个简单的解决方案,我仍在学习SQL,所以道歉。我在第二次LEFT JOIN上遇到语法错误,对于我的生活,我无法弄清楚原因。
Bundle
答案 0 :(得分:2)
将您的LEFT JOIN
移到WHERE子句之上,如下所示。在WHERE
子句之后,您应该看到的唯一事情是GROUP BY
或ORDER 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;