我有这个问题:
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]如果未选择IndustryId或选择了所有行业。如果只选择了一个行业,我会得到一个好的结果,但是当一个帖子包含在多个行业中时,我会得到多个结果,如下图所示:
因此,例如,当发生这种情况时,我想只获得该发布ID的一个结果,否则我将获得一个谷歌地图标记的多个结果,如下图所示:
有没有办法如何优化上面的查询来做我需要的? 在此先感谢Laziale
答案 0 :(得分:1)
尝试在最后使用group by子句
使用MAX(IndustryId)
。
然后
GROUP BY PostingId,EmployerId,Jobtitle
答案 1 :(得分: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的那个。
答案 2 :(得分:1)
请勿选择行业ID并使用“SELECT DISTINCT ...”