1

我目前正在学习mysql。我能够创建一个名为user(下面引用)的表。每个用户都有一个唯一的 id。一些用户共享相同的帐号。我没有运气编写一个查询来显示共享相同帐号的用户的结果。我该怎么做呢?

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `account` int(11) NOT NULL,
  `role` enum('default','admin','owner') NOT NULL DEFAULT 'default',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 
4

3 回答 3

2

尝试这个

 SELECT * FROM `user`
 WHERE account IN (SELECT account FROM user GROUP BY account HAVING COUNT(*)>1)
于 2013-07-22T18:26:22.660 回答
2
select id, a.account from users u,
(select account from users
group by account
having count(*)>1) a
where u.account=a.account
order by u.account
于 2013-07-22T18:28:27.870 回答
0
select a.id, b.id 
from users as a, users as b
where a.account=b.account and a.id < b.id;

这会找到共享帐户的用户对。

这有一些缺点:

  1. 每当 M 人共享一个帐户时,就有 M*(M-1)/2 个这样的对。
  2. 它做了一个表自连接,所以时间〜O(N ^ 2)
于 2013-07-22T18:26:42.347 回答