mysql - 如何在mysql中检索重复的记录

标签 mysql sql

我在检索具有重复 PLAYER_SCORE 的 PLAYER_SCORE 的 PLAYER 时遇到问题。 PLAYER_SCORE 被视为重复的条件是它有其他记录具有相同的 P_ID、SCORE_1、SCORE_2、SCORE_3 和 SCORE_4。

玩家表:

+------+---------+
| P_ID | NAME    |
+------+---------+
|   12 | Juan    |
|   13 | Miguel  |
|   14 | Luna    |
|   15 | Placido |
+------+---------+

PLAYER SCORE TABLE

+-------+------+---------+---------+---------+---------+
| PS_ID | P_ID | SCORE_1 | SCORE_2 | SCORE_3 | SCORE_4 |
+-------+------+---------+---------+---------+---------+
|     1 |    1 |      87 |      96 |      79 |      93 |
|     2 |    1 |      87 |      96 |      97 |      88 |
|     3 |    1 |      87 |      96 |      79 |      93 |
|     4 |    2 |      85 |      84 |      85 |      94 |
|     5 |    2 |      87 |      96 |      22 |      44 |
|     6 |    2 |      85 |      84 |      85 |      94 |
|     7 |    3 |      79 |      96 |      82 |      84 |
|     8 |    3 |      97 |      96 |      92 |      95 |
|     9 |    3 |      87 |      96 |      97 |      87 |
|    10 |    4 |      89 |      75 |      99 |      97 |
|    11 |    4 |      97 |      96 |      92 |      95 |
|    12 |    4 |      87 |      96 |      97 |      87 |
+-------+------+---------+---------+---------+---------+

My sql scripts:

Script 1 :

SELECT P.P_ID, NAME FROM PLAYER P 
INNER JOIN PLAYER_SCORE PS ON PS.P_ID = P.P_ID
GROUP BY P_ID, SCORE_1, SCORE_2, SCORE_3, SCORE_4

结果:

+------+---------+
| P_ID | NAME    |
+------+---------+
|    1 | Juan    |
|    1 | Juan    |
|    2 | Miguel  |
|    2 | Miguel  |
|    3 | Luna    |
|    3 | Luna    |
|    3 | Luna    |
|    4 | Placido |
|    4 | Placido |
|    4 | Placido |
+------+---------+

Script 2 :

SELECT P_ID, NAME FROM (
SELECT P.P_ID, NAME FROM PLAYER P
INNER JOIN PLAYER_SCORE PS ON PS.P_ID = P.P_ID
GROUP BY P_ID, SCORE_1, SCORE_2, SCORE_3, SCORE_4
) AS PLAYER GROUP BY P_ID

结果:

+------+---------+
| P_ID | NAME    |
+------+---------+
|    1 | Juan    |
|    2 | Miguel  |
|    3 | Luna    |
|    4 | Placido |
+------+---------+

预期:

+------+--------+
| P_ID | NAME   |
+------+--------+
|    1 | Juan   |
|    2 | Miguel |
+------+--------+

任何帮助...谢谢。

最佳答案

您应该只保留重复项,因此使用 HAVING 限制输出:

SELECT P.P_ID, NAME FROM PLAYER P 
INNER JOIN PLAYER_SCORE PS ON PS.P_ID = P.P_ID
GROUP BY P_ID, NAME, SCORE_1, SCORE_2, SCORE_3, SCORE_4
HAVING count(*) > 1

关于mysql - 如何在mysql中检索重复的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24359966/

相关文章:

php - 我该如何优化这个 MySQL 查询?

php - Codeigniter 中 AND 的事件记录

mysql - SQL语句忽略where参数

python - SQLalchemy python3 s = select([用户]) Namerror : name 'users' is not defined

mysql - 按多个字符串搜索以获得最佳结果

mysql - 如何在 Codeigniter 中绑定(bind)使用 LIMIT 参数变量的查询

php - Drupal 删除/更新数据库中的错误行

php - Magento - 从管理订单页面添加/删除功能的正确方法?

python - 在 Python 脚本中运行时 SQL 查询返回空白输出

php - 具有多个 AND 的 MySQL 查询