我有这样的表
mapname id time
---------------------
cvjourney 1 65.24
cvjourney 3 69.45
cvjourney 2 64.25
cvjourney 8 75.45
dark_hop 2 65.87
dark_hop 1 61.51
coldrunss 1 12.50
我想从该表中选择数据来获得类似的内容(对于id 1,2)
cvjourney 1 65.24
cvjourney 2 64.25
dark_hop 2 65.87
dark_hop 1 61.51
所以我想要选择数据,其中两个玩家都在同一张地图上有记录,我不想要选择地图,其中玩家[1]有记录而玩家[2]没有,或者反过来。
这是我的选择,但是我无法摆脱一个玩家有记录而另一个没有记录的地图。
SELECT *
FROM table
WHERE mapname IN (
SELECT mapname
FROM table
WHERE id IN ('1','2')
)
AND id IN ('1', '2')
ORDER BY mapname
请帮帮我吗?
答案 0 :(得分:1)
您可以使用聚合来仅获取那些同时存在ID的地图名称(这意味着在应用id过滤器后,不同的ID数将为2)然后使用它来获取相关行。
select t1.*
from table t1
join (
select mapname
from table
where id in (1, 2)
group by mapname
having count(distinct id) = 2
) t2 on t1.mapname = t2.mapname
where t1.id in (1, 2)
order by t1.mapname
使用也可以使用IN
:
select t1.*
from table t1
where mapname in (
select mapname
from table
where id in (1, 2)
group by mapname
having count(distinct id) = 2
)
and id in (1, 2)
order by mapname