我必须为以下情况编写一个通用的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城市的人,如果新城市和新人进入,那么只选择那些属于所有城市的人。
答案 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;