【发布时间】:2013-07-09 03:32:58
【问题描述】:
SQL Server 管理工作室 2005
我编写了一个查询,允许用户搜索各种类别,例如描述、原产国、品牌名称和种植方法。用户可以为任意数量的过滤器输入数据,并且返回的结果将基于他们输入的内容。
以下是此查询的工作版本;然而,这就是 SSMS 重新格式化我之前编写的原始查询的方式。我需要尝试弄清楚我之前是如何编写它的,这样我才能在这个过滤器中再添加两列:
SELECT DISTINCT masterCorporateGtin.SupplierNo, masterCorporateGtin.GTIN, masterCorporateGtin.Description, masterCorporateGtin.Commodity, masterCorporateGtin.Variety, masterCorporateGtin.CoO, masterCorporateGtin.PackSize, masterCorporateGtin.BrandName, masterCorporateGtin.GrowMethod, masterCorporateGtin.Grade
FROM GTINs AS masterCorporateGtin INNER JOIN
(SELECT DISTINCT SupplierNo, GTIN, Description, CoO, PackSize, BrandName, GrowMethod, Grade
FROM GTINs AS masterCorporateGtin
WHERE (Description LIKE '%' + @productDescription + '%') AND (BrandName LIKE '%' + @brandName + '%') AND
(GrowMethod LIKE '%' + @growmethod + '%') AND (CoO = @countryoforigin) OR
(Description LIKE '%' + @productDescription + '%') AND (BrandName LIKE '%' + @brandName + '%') AND (CoO = @countryoforigin) AND
(@growmethod IS NULL) OR
(Description LIKE '%' + @productDescription + '%') AND (BrandName LIKE '%' + @brandName + '%') AND
(GrowMethod LIKE '%' + @growmethod + '%') AND (@countryoforigin IS NULL) OR
(Description LIKE '%' + @productDescription + '%') AND (BrandName LIKE '%' + @brandName + '%') AND (@growmethod IS NULL) AND
(@countryoforigin IS NULL) OR
(Description LIKE '%' + @productDescription + '%') AND (GrowMethod LIKE '%' + @growmethod + '%') AND (CoO = @countryoforigin) AND
(@brandName IS NULL) OR
(Description LIKE '%' + @productDescription + '%') AND (CoO = @countryoforigin) AND (@growmethod IS NULL) AND
(@brandName IS NULL) OR
(Description LIKE '%' + @productDescription + '%') AND (GrowMethod LIKE '%' + @growmethod + '%') AND (@countryoforigin IS NULL) AND
(@brandName IS NULL) OR
(Description LIKE '%' + @productDescription + '%') AND (@growmethod IS NULL) AND (@countryoforigin IS NULL) AND
(@brandName IS NULL) OR
(BrandName LIKE '%' + @brandName + '%') AND (GrowMethod LIKE '%' + @growmethod + '%') AND (CoO = @countryoforigin) AND
(@productDescription IS NULL) OR
(BrandName LIKE '%' + @brandName + '%') AND (CoO = @countryoforigin) AND (@growmethod IS NULL) AND
(@productDescription IS NULL) OR
(BrandName LIKE '%' + @brandName + '%') AND (GrowMethod LIKE '%' + @growmethod + '%') AND (@countryoforigin IS NULL) AND
(@productDescription IS NULL) OR
(BrandName LIKE '%' + @brandName + '%') AND (@growmethod IS NULL) AND (@countryoforigin IS NULL) AND
(@productDescription IS NULL) OR
(GrowMethod LIKE '%' + @growmethod + '%') AND (CoO = @countryoforigin) AND (@brandName IS NULL) AND
(@productDescription IS NULL) OR
(GrowMethod LIKE '%' + @growmethod + '%') AND (@countryoforigin IS NULL) AND (@brandName IS NULL) AND
(@productDescription IS NULL) OR
(CoO = @countryoforigin) AND (@growmethod IS NULL) AND (@brandName IS NULL) AND (@productDescription IS NULL) OR
(@growmethod IS NULL) AND (@countryoforigin IS NULL) AND (@brandName IS NULL) AND (@productDescription IS NULL))
AS productFilter ON masterCorporateGtin.Description = productFilter.Description AND masterCorporateGtin.BrandName = productFilter.BrandName AND
masterCorporateGtin.GrowMethod = productFilter.GrowMethod AND masterCorporateGtin.CoO = productFilter.CoO
据我所知,我之前所做的一切与下面的类似。我想我只是在 WHERE 子句中一一添加语句,看看它们是否有效。我又试了一次,但没有用。我会很感激任何见解。谢谢。
SELECT DISTINCT masterCorporateGtin.SupplierNo, masterCorporateGtin.GTIN, masterCorporateGtin.Description, masterCorporateGtin.Commodity, masterCorporateGtin.Variety, masterCorporateGtin.CoO, masterCorporateGtin.PackSize, masterCorporateGtin.BrandName, masterCorporateGtin.GrowMethod, masterCorporateGtin.Grade
FROM GTINs AS masterCorporateGtin INNER JOIN
(SELECT DISTINCT SupplierNo, GTIN, Description, Commodity, PackSize, BrandName, GrowMethod, Grade
FROM GTINs AS masterCorporateGtin
WHERE (Description LIKE '%' + @productDescription + '%') OR
(@productDescription IS NULL)) AS searchFilter ON masterCorporateGtin.Description = searchFilter.Description
【问题讨论】:
标签: sql-server-2005 subquery correlated-subquery derived-table