2012-06-05 23 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)之間的區別嗎? –