问题看起来像是重复的,因为我找到了很多与此相关的答案,但即使我认为我已经尝试了一切,但没有回答我的问题。
我想选择具有相同值的所有行(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视为选择两次,否则它们实际上不应显示两次。
任何帮助表示感谢。
答案 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;
这会将重复项放在一个单独的行上。