2013-12-07 141 views
0

我有一个表叫我的数据库Player,它看起来像这样MySQL查询选择重复

id placex placey wealth strenght goalx goaly 
---------------------------------------------------------------  
    1  500  20  3335  2500  500  440 
    2  500  20  777  2000  20  500 
    3  20  500  1000  2000  500  20 
    4  500  440  1000  2000  20  20 

我需要将在玩家一个位于同一位置的条件显示ID和财富查询所以应该有placex,placey的重复用于不同的球员

在这个表中,我们将有ID为1,播放器ID 2在同一个地方的球员,我写了这个

SELECT 
    id, placex, placey, wealth 
FROM 
    Player 
WHERE 
    placex IN (SELECT placex FROM Player HAVING COUNT(id) > 1); 

,我得到这个作为输出

+----+--------+--------+--------+ 
| id | placex | placey | wealth | 
+----+--------+--------+--------+ 
| 1 | 500 |  20 | 3335 | 
| 2 | 500 |  20 | 777 | 
| 4 | 500 | 440 | 1000 | 
+----+--------+--------+--------+ 

我需要消除id为4的球员,所以我要如何修改我的查询还包括placey的DUP的

我期望能获得这个

| id | placex | placey | wealth | 
    1 500  20  3335 
    2 500  20  777 
+0

的输出结果,你的预期? – Loc

+0

我希望得到相同的输出,因为我用quary写了除了没有最后一行,所以应该没有播放器id 4那里 – russiandobby

+0

测试我的解决方案 – Loc

回答

1

运行这个,让我知道你的结果:

SELECT A.id, A.placex, A.placey, A.wealth 
FROM Player A, 
    (SELECT placex, placey 
     FROM Player 
     GROUP BY placex, placey 
     HAVING COUNT(*) > 1 
    ) B 
WHERE A.placex = B.placeX 
AND A.placey = B.placey 
+0

是的,谢谢你的作品 – russiandobby

0
Select id, wealth From Player 
inner Join (
Select PlaceX, PlaceY From Player Having(count(id) > 1) Occupied 
On Occupied.PlaceX = Player.PlaceX and Occupied.PlaceY = Player.PlaceY 

在子查询为您提供更多选择之前,请务必查看联接。

+0

OMG对不起,我用我的小提琴编辑了你的文章。 – Mihai

+0

我的学校服务器不会让我使用占用,给我一个错误>< – russiandobby

+0

Um更改占用B然后。倾向于使我的别名有意义,但只要它们对于查询而言是独一无二的,那么它们并不重要,正如您接受的答案所表明的那样。 –

0
SELECT id,placex,placey,wealth FROM player WHERE placey IN(
SELECT placey FROM Player 
GROUP BY placey 
HAVING COUNT(placey)>1) 

SQL Fiddle

+0

你的解决方案也可以工作谢谢 – russiandobby

+0

@ user2977404它与Loc解决方案是一样的,但他的速度更快。 – Mihai

0
SELECT p1.id, p1.wealth 
FROM Player AS p1 
INNER JOIN Player AS p2 
ON (p1.id <> p2.id AND p1.PlaceX = p2.PlaceX AND p1.PlaceY = p3.PlaceY) 
GROUP BY p1.id 

您还应该添加一个索引指数双双PlaceX和PlaceY在一起。