mysql - 从同一个表中查找重复项并从 sql 中的另一个表中约束它们

标签 mysql

哦,我的标题不是最好的,因为英语不是我的主要语言,如果有人理解这里的问题,也许有人可以解决这个问题而不是投反对票。

基本上我有两个表 - 锦标赛玩家和结果。 Tourneyplayers 就像一个边 table ,它收集了多个表格中的锦标赛信息 - 结果、锦标赛、玩家等。我想检查结果表中 day1_best 列的重复项,来自单个锦标赛并返回所有具有重复项的锦标赛玩家。

Tourneyplayers 包含行:

Tourneyplayers
tp_id | resultid | tourneyid
1     | 2        | 91
2     | 21       | 91
3     | 29       | 91
4     | 1        | 91
5     | 3        | 92

结果包含行:

Results:
r_id | day1_best
1    | 3
2    | 1
3    | 4
..   | ..
21   | 1
..   | ..
29   | 2

现在 id = 91 的比赛共有 4 个结果,id 为 1、2、21 和 29。我想返回有重复的值,所以目前的结果是

Result
tp_id | resultid | day1_best
1     | 2        | 1
2     | 21       | 1

我试过这样写:

SELECT * 
FROM tourneyplayers
WHERE resultid
IN (

SELECT r1.r_id
FROM results AS r1
INNER JOIN results AS r2 ON ( r1.day1_best = r2.day1_best ) 
AND (
r1.r_id <> r2.r_id
)
)
AND tourneyid =91

但是除了具有相同 day1_best 的值之外,它还选择了两个不相同的值。我如何改进我的 SQL 或重写它?

最佳答案

首先,您JOIN 两个表,这样您就知道数据的样子了。

SELECT *
FROM tourney_players t
JOIN results r
  ON t.`resultid` = r.`r_id`;

然后使用相同的查询GROUP 来查看tourneyid, day1_best 组合有多行

SELECT `tourneyid`, `day1_best`, count(*) as total
FROM tourney_players t
JOIN results r
  ON t.`resultid` = r.`r_id`
GROUP BY `tourneyid`, `day1_best`;  

最后,您使用基础 JOIN 并执行 LEFT JOIN 以查看哪些行具有匹配项并仅显示这些行。

SELECT t.`tp_id`, r.`r_id`, r.`day1_best`
FROM tourney_players t
JOIN results r
  ON t.`resultid` = r.`r_id`
LEFT JOIN (SELECT `tourneyid`, `day1_best`, count(*) as total
           FROM tourney_players t
           JOIN results r
             ON t.`resultid` = r.`r_id`
           GROUP BY `tourneyid`, `day1_best`
           HAVING count(*) > 1) as filter           
  ON t.`tourneyid` = filter.`tourneyid`
 AND r.`day1_best` = filter.`day1_best`
WHERE filter.`tourneyid` IS NOT NULL;

SQL DEMO

输出

enter image description here

关于mysql - 从同一个表中查找重复项并从 sql 中的另一个表中约束它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41722154/

相关文章:

javascript - 使用 MySQL、PHP 和 AngularJS 的服务器端分页

mysql - 选择独立全文搜索服务器 : Sphinx or SOLR?

MySQLWhere IN 同时还查找任何具有前面有任意数量的 0 的值的值

mysql - 一张表与两张不同表的关系

mysql - MySQL 中哪些数据类型可以存储巨大的数值?

php - 如何通过 laravel eloquent 模型连接三个表

php - 在 PHP/MySQL 中比较当前日期与生日

php - 从同一个表中获取值

mysql - 如何在 mysql 中将自动编号插入字段 id?

php - mySQL 查询不返回 PHP 中的串联结果