MySQL:试图找到纠正MySQL查询

时间:2014-08-15 15:16:01

标签: mysql

我有以下两个表的架构:
Users(first_name,last_name,age,gender)
Friends(friend_one,friend_two)

其中first_nameUsers中的关键字,而“朋友”表格中的值(friend_onefriend_two)实际上是first_name取自'用户'表。 (意味着引用完整性在Users(first_name)Friends(friend_one,friend_two)之间保持不变。

我正在尝试获得“十大最受欢迎的朋友”,这意味着拥有最多朋友的10位用户拥有正确的MySQL查询。
我的第一次尝试是:

SELECT first_name,COUNT(first_name) 
FROM users,friends
WHERE first_name=friend_one OR first_name=friend_two
GROUP BY first_name;

首先,我不确定这是否是正确的查询,更明显的问题是它不会产生前10名。 我知道SQL有关键字TOP,但我使用的是MySQL 以上查询是否正确?如果没有,为什么,我如何获得前10名?

1 个答案:

答案 0 :(得分:1)

以下是我将如何编写您的查询版本:

SELECT u.first_name, COUNT(first_name) as NumFriends
FROM users u join
     friends f
     on u.first_name = f.friend_one OR u.first_name = f.friend_two
GROUP BY u.first_name
ORDER BY NumFriends
LIMIT 10;

如果friends是对称关系,任何两个朋友之间只有一行,这将有效。如果朋友可以有多个行(因此person1可以为person2,反之亦然),那么这可能会超过该数量。目前尚不清楚这是否可能。

请注意,我“修复”了查询以使用正确的join语法,添加了表名称缩写的表别名以及order bylimit子句。