1

次のクエリがありますが、結果が得られません。visitSearchEngine と clubUsers の 2 つのテーブルがあります。clubUsers に含まれていないユーザーを一覧表示したい。しかし、 != を使用しても役に立ちません。clubUsers テーブルにも存在するユーザーが表示されます。

 SELECT distinct(vs.users), vs.avisitedDate FROM visitSearchEngine vs, clubUsers cu  
 WHERE vs.users!=''
 AND (vs.users!=cu.users)
 AND vs.status='0' AND vs.hitType='googleIdentified'
 AND ((time_to_Sec(timediff(now(),vs.avisitedDate)))/60)>=5
 AND ((time_to_Sec(timediff(now(),vs.avisitedDate)))/60)<5

どこが間違っているかを教えてください。このクエリを書く別の良い方法があるかどうかを提案してください。

ありがとう

4

3 に答える 3

1

これを試して:

SELECT DISTINCT(vs.users), vs.avisitedDate FROM visitSearchEngine vs, 
WHERE vs.users!='' AND NOT EXISTS (SELECT * FROM clubUsers cu  WHERE vs.users = cu.users )
AND vs.status='0' AND vs.hitType='googleIdentified'
AND ((TIME_TO_SEC(TIMEDIFF(NOW(),vs.avisitedDate)))/60)>=5
AND ((TIME_TO_SEC(TIMEDIFF(NOW(),vs.avisitedDate)))/60)<5
于 2012-12-07T12:47:53.270 に答える
1

これを試して:

 SELECT distinct(vs.users), vs.avisitedDate
 FROM visitSearchEngine as vs LEFT JOIN clubUsers as cu ON vs.users= cu.users
 WHERE vs.status='0' AND vs.hitType='googleIdentified'
 AND ((time_to_Sec(timediff(now(),vs.avisitedDate)))/60)>=5
 AND ((time_to_Sec(timediff(now(),vs.avisitedDate)))/60)<5
 AND cu.users IS NULL;
于 2012-12-07T12:56:17.767 に答える
0

おそらくIS NOT NULL演算子が必要です:

vs.users IS NOT NULL

NULL文字列演算子と比較することはできません:

mysql> SELECT NULL='', NULL<>'';
+---------+----------+
| NULL='' | NULL<>'' |
+---------+----------+
|    NULL |     NULL |
+---------+----------+
1 row in set (0.01 sec)

また、次の方法でクエリを読みやすくすることもお勧めします。

  1. 冗長な括弧の削除
  2. 明示的なJOINs の使用
于 2012-12-07T12:52:41.933 に答える