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

Mysql 从同一个表中查找重复项,并从sql中的另一个表中约束它们,mysql,Mysql,哦,我的标题不是最好的,因为英语不是我的主要语言,如果有人理解了这里的问题,也许有人可以解决这个问题,而不是投反对票 基本上,我有两个表格-tourneyplayers和results。Tourneyplayers类似于一个边表,它跨多个表收集锦标赛信息-结果、锦标赛、球员等。我想检查结果表中day1_best列中的重复项,从单个锦标赛返回所有具有重复项的Tourneyplayers TourneyPlayer包含行: Tourneyplayers tp_id | resultid | tour

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

基本上,我有两个表格-tourneyplayers和results。Tourneyplayers类似于一个边表,它跨多个表收集锦标赛信息-结果、锦标赛、球员等。我想检查结果表中day1_best列中的重复项,从单个锦标赛返回所有具有重复项的Tourneyplayers

TourneyPlayer包含行:

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的值之外,它还选择了两个不具有相同day1_best的值。如何改进或重写SQL?

请尝试以下方法:

   Select tp.tp_id , tp.resultid ,r.day1_best from (Select * from Tourneyplayers 
where tourneyid = 91)as tp inner join (select * from Result day1_best in(select 
day1_best from result group by day1_best having count(*)>1 ) )as r on tp.resultid  
= r.r_id ;
首先连接两个表,以便了解数据的外观

SELECT *
FROM tourney_players t
JOIN results r
  ON t.`resultid` = r.`r_id`;
然后使用相同的查询分组,查看tourneyid、day1\u最佳组合有多行

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`;  
最后,使用基本联接并执行左联接以查看哪些行具有匹配项,并仅显示这些行

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;
输出


你的例子不完整。为什么你的结果没有结果1或29?结果是我想要得到的,结果1有值为3的day1_best,结果29有值为2的day1_best,它们不是重复的。我看不到重复的,抱歉,但对我来说没有意义。嗯,有两行r_id=2和r_id=21,它们有值为1的day1_best,这是一个重复的列1_最好?或者我误解了什么?看起来你不需要检查Tourneyplayers只需要检查结果上的重复。仍然返回没有重复的day1_best的值。添加了imgur链接:按day1_best having count*>1从结果组中选择day1_best。此子查询返回他们有重复的值。因此没有机会获得显示的非重复值