1

私のテーブルの 1 つは、ユーザーのブラウザーからの UserAgent を、それに関連付けられた対応する UID と他のデータと共に格納します。これは、ユーザーがログインするたびに発生します。したがって、ユーザーごとに多くのエントリがあります。このテーブルにクエリを実行して、品質に基づいて一意のユーザーを見つけようとしています。

たとえば、IE6 を使用し、他のブラウザーを使用していないユーザーのみを検索しようとしています。これまでに取得できる最も近い方法は、次の方法です。

select distinct (U.UID) from TABLE1 tb1
inner join TABLE1 tb2 on tb1.UID = tb2.UID
where tb1.UserAgent like '%MSIE 6.%'
and tb2.UserAgent like '%MSIE 6.%'

これは、IE6 やその他のブラウザーを使用したことのあるユーザーも返すようです。私は基本的にこれの反対を見つけようとしています。IE6 および IE6 のみを使用したことがあるユーザー。私も以下のものを試しましたが、このユーザーのかなりの部分がIE6以外のブラウザーで他のエントリを持っていたため、どちらもうまくいきませんでした.

select distinct (U.UID) from TABLE1 tb1
inner join TABLE1 tb2 on tb1.UID = tb2.UID
where tb1.UserAgent like '%MSIE 6.%'
and tb2.UserAgent not like '%MSIE 6.%'

私は正しい軌道に乗っていると思いますが、ここから大きく外れている可能性があります。

ティア!

4

3 に答える 3

1

like '%MSIE 6.%'他のユーザー エージェントを持たないユーザー エージェントを持つユーザーを選択します。内部クエリは、使用していないユーザーを返します'%MSIE 6.%'

select distinct tb1.UID from TABLE1 tb1
where tb1.UserAgent like '%MSIE 6.%' and
      NOT EXISTS ( select tb2.UID from TABLE1 tb2
                   where tb1.UID = tb2.UID AND 
                         tb2.UserAgent not like '%MSIE 6.%' )

likeNOT INの代わりに使用することもできます。NOT EXISTStb1.UID NOT IN (...)

select distinct tb1.UID from TABLE1 tb1
where tb1.UserAgent like '%MSIE 6.%' and
      tb1.UID NOT IN ( select tb2.UID from TABLE1 tb2
                       where tb2.UserAgent not like '%MSIE 6.%' )

where 句の条件tb1.UserAgent like '%MSIE 6.%' andも、副作用なしで削除できNOTます。内部クエリは、ユーザーのエージェントが %MSIE 6.% と一致することを確認します。

于 2013-09-17T20:16:12.257 に答える
1
select distinct (tb1.UID) from TABLE1  tb1
where not exists (
                   select 1 
                   from TABLE1 
                   where UID = tb1.UID and UserAgent not like '%MSIE 6.%'
                 )
于 2013-09-17T20:16:57.167 に答える