如何编写通用SQL select语句来选择属于所有城市的人

时间:2015-02-13 16:43:13

标签: mysql sql sql-server database

我必须为以下情况编写一个通用的sql查询:

city_id, person_id
0           0
1           1
0           2
1           3
0           3
0           4
1           4
1           5
0           6
0           7

我必须只选择属于0和1城市的人,如果新城市和新人进入,那么只选择那些属于所有城市的人。

4 个答案:

答案 0 :(得分:1)

要查找属于城市0和城市1的人,如果这些是您正在查看的唯一两个城市:

SELECT person_id,
       COUNT(*)
FROM table
GROUP BY person_id
HAVING COUNT(*) > 1

这将显示所有具有多条记录的person_id值(例如它们属于多个城市的位置。)

如果您有两个以上城市,则可以按城市进一步细化:

SELECT person_id,
       COUNT(*)
FROM table
WHERE city_id IN (0, 1) -- or any city configuration you need.
GROUP BY person_id
HAVING COUNT(*) > 1

答案 1 :(得分:1)

类似以下内容:

SELECT person_id
FROM table 
GROUP BY person_id
HAVING COUNT(*) > (
  (SELECT COUNT(DISTINCT city_id) FROM table
  )-1);

我希望它可以帮助别人。

答案 2 :(得分:1)

此查询并未对数据库中有多少个城市做出任何假设。

select person_id from T
where city_id in (0, 1)
group by person_id
having count(distinct city_id) = 2 /* distinct isn't necessary if city_id is guaranteed unique per person */

答案 3 :(得分:0)

如果您的city_id是自动增量。像这样的东西也会起作用。

SELECT person_id
FROM table 
GROUP BY person_id
HAVING COUNT(*) > (SELECT MAX(city_id) FROM cities)+1;