2011-11-20 4 views
0
select DISTINCT(user),host from logins where ip in (
SELECT ip FROM logins group by ip HAVING COUNT(user) > 1) 

これは問題なく動作します。予期しないSQLクエリの動作。 (DISTINCT)

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

時間列を追加することで、別のユーザーが選択されなくなり、重複が返されなくなりました。それはなぜそれをするのですか?これは、整数フィールド(IDと時間など)を追加する場合にのみ発生します。

クエリは基本的に、混乱するIPを持つログイン・テーブルからユーザーを引き出します。 1人のユーザーを複数回引っ張ってはいけません。

答えて

5

DISTINCTは各行で機能する関数ではありません。時間はすべての異なるユーザーで同じではないため、distinctを使用することはできません。

GROUP BYを使用して、timeカラムにグループ関数(MAX、MIN、GROUP_CONCATなど)を使用します。

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

解決策を説明し、問題の作成者が説明されている動作を見ている理由を説明することを検討してください。これにより投稿の質が向上し、単一の問題を解決するのではなく、読者の知識を向上させることができます。 – Iravanchi

関連する問題