意外的SQL查询行为。 (不同)

时间:2011-11-20 19:15:25

标签: mysql

select DISTINCT(user),host from logins where ip in (
SELECT ip FROM logins group by ip HAVING COUNT(user) > 1)

这很好用。

select DISTINCT(user),host,time from logins where ip in (
SELECT ip FROM logins group by ip HAVING COUNT(user) > 1)

通过添加时间列,它不再选择不同的用户并返回重复项。为什么这样做?只有当我添加整合器字段(例如id和时间)时才会发生这种情况。

该查询基本上将用户从登录表中提取出令人困惑的IP。一个用户不应该被拉多次。

2 个答案:

答案 0 :(得分:5)

DISTINCT不是一个适用于每一行的函数,所有不同用户的时间都不相同,所以你不能使用distinct。

使用GROUP BY,并使用组函数(MAX,MIN,GROUP_CONCAT等)作为时间列。

答案 1 :(得分:1)

SELECT user,host,time 
FROM logins 
WHERE ip IN (SELECT ip FROM logins group by ip HAVING COUNT(user) > 1)
GROUP BY user