在SQL中选择并打印出重复项? (没有重复)

时间:2014-05-25 15:12:53

标签: mysql sql

问题看起来像是重复的,因为我找到了很多与此相关的答案,但即使我认为我已经尝试了一切,但没有回答我的问题。

我想选择具有相同值的所有行(category_max)。我试过这个问题:

SELECT w1.user_name, w1.wallet_adr, w1.category_min, w1.category_max,
w2.user_name, w2.wallet_adr, w2.category_min, w2.category_max
FROM WaitingPlayers w1, WaitingPlayers w2
WHERE w1.category_max = w2.category_max
AND w1.wallet_adr <> w2.wallet_adr

我也尝试过内连接,你可以在这里看到:

SELECT 
w1.user_name, w1.wallet_adr, w1.category_min, w1.category_max,
w2.user_name, w2.wallet_adr, w2.category_min, w2.category_max
FROM WaitingPlayers w1
INNER JOIN WaitingPlayers w2 ON w2.category_max = w1.category_max 
WHERE w2.wallet_adr != w1.wallet_adr

但结果总是一样的:

http://i61.tinypic.com/10nyus3.png

这就是我想要的:

http://i60.tinypic.com/2lvxjk.png

Wallet_adr和用户名是唯一的,因此除非将选择w1和w2视为选择两次,否则它们实际上不应显示两次。

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:2)

你需要一个小组:

 WHERE w2.wallet_adr != w1.wallet_adr 
 GROUP BY w1.user_name

编辑:而不是

  SELECT w1.user_name, w1.wallet_adr, w1.category_min, w1.category_max,
  w2.user_name, w2.wallet_adr, w2.category_min, w2.category_max
  FROM ...

使用

 SELECT w1.user_name, w1.wallet_adr, w1.category_min, w1.category_max
 FROM ....

答案 1 :(得分:2)

这有所有对,可能会变得非常大:

SELECT w1.user_name, w1.wallet_adr, w1.category_min, w1.category_max,
       w2.user_name, w2.wallet_adr, w2.category_min, w2.category_max
FROM WaitingPlayers w1 join
     WaitingPlayers w2
     on w1.category_max = w2.category_max AND
     w1.wallet_adr <> w2.wallet_adr;

我想以下内容会更有用:

select wp.*
from WaitingPlayers wp join
     (select wp.category_max, count(*) as cnt
      from WaitingPlayers wp
      group by wp.category_max
      having cnt > 1
     ) wpcnt
     on wp.category_max = wpcnt.category_max
order by cnt desc, wp.category_max;

如果您需要重复项有多个wallet_adr,请将子查询更改为:

select wp.*
from WaitingPlayers wp join
     (select wp.category_max, count(distinct wp.wallet_adr) as cnt
      from WaitingPlayers wp
      group by wp.category_max
      having cnt > 1
     ) wpcnt
     on wp.category_max = wpcnt.category_max
order by cnt desc, wp.category_max;

这会将重复项放在一个单独的行上。