2012-06-05 24 views
0

我得到的记录如下: provider_id location_id | service_id想要进一步过滤下面的mysql结果集

21 | 42 | 387

32 | 42 | 387

23 | 42 | 397

45 | 42 | 397

25 | 42 | 700

25 | 53 | 397

27 | 53 | 700

我想进一步过滤掉,如下所示。我查询了service_id 387,397和700并获得了记录。

但我想为每个位置所有三个service_ids 387,397和700必须在那里。现在我正在获取具有1或2个service_id的位置。我想过滤掉这些记录。这样我就可以获得所有支持所有三项搜索的服务。

此外,记录还有多个供应商在相同或不同的服务位置上工作。

回答

1

下面的查询做什么,我想你想:

select location, count(distinct serviceid) as numserviceids 
from t 
where serviceid in (387, 397, 700) 
having count(distinct serviceid) = 3 

它选择你正在寻找的服务ID。然后按位置对它们进行分组,然后计算每个位置的服务ID数量,并仅返回那些具有全部三个服务ID的服务ID。

+0

这将获取记录,每个服务有3次出现或记录。但不要那样。 – Kammy

+0

这将过滤具有三个不同服务ID的位置,并且您正在查找具有全部三个位置的位置。这是我如何理解你的原始问题。你了解COUNT()和COUNT(DISTINCT)之间的区别吗? –