【问题标题】:want to filter out following mysql resultset further想进一步过滤掉以下mysql结果集
【发布时间】:2026-02-13 09:30:01
【问题描述】:

我得到的记录如下: provider_id location_id | service_id

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_id 387、397 和 700 都必须存在。现在我正在获取具有 1 或 2 个 service_id 的位置。我想过滤掉这些记录。这样我就可以获得所有支持搜索所针对的所有三种服务的位置。

还记录有多个提供商在(相同或不同)位置提供服务。

【问题讨论】:

    标签: mysql sql filter resultset


    【解决方案1】:

    以下查询符合我的要求:

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

    它会选择您要查找的服务 ID。然后它按位置对它们进行分组,计算每个位置的服务 id 的数量,并只返回同时具有这三个的服务 id。

    【讨论】:

    • 这将获取每个服务有 3 次出现或记录的记录。但不想那样。
    • 这会过滤具有三个不同服务 ID 的位置,并且您正在寻找同时具有这三个的位置。这就是我理解你原来的问题的方式。你了解 COUNT() 和 COUNT(DISTINCT) 的区别吗?
    最近更新 更多