SQL - 选择A相等且B是变量的位置

时间:2017-03-03 16:51:03

标签: mysql sql

我有这样的表

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

请帮帮我吗?

1 个答案:

答案 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

How to force abort on "glibc detected *** free(): invalid pointer"