基于多个列返回重复行

时间:2015-02-02 15:12:46

标签: mysql group-by duplicates

在MySQL中搜索重复项时如何返回所有行?你不得不忍受我,因为我不是MySQL的专家。

这是一个例子。

DATA

CREATE TABLE IF NOT EXISTS `PlayerList` (
  `Team` varchar(50) COLLATE latin1_general_ci NOT NULL,
  `Player` varchar(50) COLLATE latin1_general_ci NOT NULL,
  `Games` int(2) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

INSERT INTO `PlayerList` (`Team`, `Player`, `Games`) VALUES
('Team1st', 'Geoff', 8),
('Team1st', 'John, 4),
('Team1st', 'Pete', 6),
('Team2nd', 'Dave', 6),
('Team2nd', 'Bill', 6),
('Team2nd', 'Darren', 6),
('Team2nd', 'Geoff', 4);

我在下面运行。查找玩家为多个团队效力的实例。

SELECT * FROM `PlayerList` GROUP BY Player HAVING COUNT(Player) > 1

但是由于group by子句(返回第一行),这只会按预期返回一行。我想在SQL结果中返回两行,但由于WHERE子句中没有COUNT,我不知道如何处理这种情况。我不想将GROUP结果放在一起。我只想列出播放器列中具有重复值的所有行。甚至可以这样做吗?

1 个答案:

答案 0 :(得分:0)

您可以通过返回查询结果来执行此操作:

SELECT pl.*
FROM PlayerList pl JOIN
     (SELECT Player
      FROM `PlayerList`
      GROUP BY Player
      HAVING COUNT(Player) > 1
     ) pp
     ON pl.Player = pp.Player;