2

我有这个查询:

SELECT p.[PostingID]
      ,[EmployerID]
      ,[JobTitle]                  
      ,pin.[IndustryID]         
FROM [Posting] p
INNER JOIN [City] c
  ON p.CityID = c.CityID
LEFT OUTER JOIN PostingIndustry pin
  ON p.PostingID = pin.PostingID
WHERE (c.CityID = @CityId OR @CityId IS NULL) 
  AND (p.StateProvinceID = @StateProvinceId OR @StateProvinceId IS NULL) 
  AND (pin.IndustryID = @IndustryId OR @IndustryId IS NULL) 
  AND 
  (
     (p.[Description] LIKE '%' + @Keyword + '%' OR @Keyword IS NULL) 
     OR (p.[JobTitle] LIKE '%' + @Keyword + '%'  OR @Keyword IS NULL)
  ) 
  AND p.StreetAddress IS NOT NULL 
  AND p.ShowOnMap = 1

如果未选择 IndustryId 或选择了所有行业,则返回所有 pin.[IndustryID] 的结果。如果只选择一个行业,我会得到一个很好的结果,但是当一个帖子包含在多个行业中时,我会得到多个结果,如下图所示:

在此处输入图像描述

因此,例如,当这种情况发生时,我只想获得该发布 ID 的一个结果,否则我会根据下图获得一个谷歌地图标记的多个结果: 在此处输入图像描述

有没有办法优化上面的查询来做我需要的?提前致谢, Laziale

4

3 回答 3

1

尝试在最后使用 group by 子句

使用MAX(IndustryId).

然后也

GROUP BY PostingId,EmployerId,Jobtitle
于 2013-11-07T22:59:32.900 回答
1

仅选择具有最小 IndustryId 的行怎么样:

SELECT [PostingID]
      ,[EmployerID]
      ,[JobTitle]                  
      ,MIN(pin.[IndustryID])         
FROM [Posting] p
INNER JOIN [City] c
  ON p.CityID = c.CityID
LEFT OUTER JOIN PostingIndustry pin
  ON p.PostingID = pin.PostingID
WHERE (c.CityID = @CityId OR @CityId IS NULL) 
  AND (p.StateProvinceID = @StateProvinceId OR @StateProvinceId IS NULL) 
  AND (pin.IndustryID = @IndustryId OR @IndustryId IS NULL) 
  AND 
  (
     (p.[Description] LIKE '%' + @Keyword + '%' OR @Keyword IS NULL) 
     OR (p.[JobTitle] LIKE '%' + @Keyword + '%'  OR @Keyword IS NULL)
  ) 
  AND p.StreetAddress IS NOT NULL 
  AND p.ShowOnMap = 1
GROUP BY [PostingID],[EmployerID],[JobTitle] 

只要你只有一个,它就会返回那个,当你有多个时,它只返回具有最小 IndustryId 的那个。

于 2013-11-07T23:05:12.097 回答
1

不要选择行业 ID 并使用“SELECT DISTINCT...”

于 2013-11-07T23:16:23.757 回答