0

次のようなテーブルがあるとします。

|id|userID|email         |website    |
--------------------------------------
|1 |user1 |user1@test.com|website.com|
|2 |user2 |user2@test.com|website.com|
|3 |user3 |user3@test.com|website.com|
|4 |user1 |user1@test.com|foo.com    |
|5 |user2 |user2@test.com|foo.com    |

そして、website='website.com' のすべての行を取得し、website='foo.com' の一致するユーザー ID を持つ対応する行を取得したい

したがって、この例では行 1 と 2 が返されます。

何か案は?

4

3 に答える 3

2

1 つの方法を次に示します。

select t.*
from t
where t.website = 'website.com' and
      exists (select 1 from t t2 where t2.userId = t.userId and t2.website = 'foo.com');

編集:

これを結合として表現することもできます。

select distinct t.*
from t join
     t2
     on t2.userId = t.userId and
        t.website = 'website.com' and
        t2.website = 'foo.com';

重複がないことがわかっている場合は、distinct.

于 2013-08-07T13:41:56.447 に答える
1

あなたができるユーザーを取得するには

select userID
from your_table
where website in ('website.com', 'foo.com')
group by userID
having count(distinct website) = 2

ただし、完全な行が必要な場合は、

select * from your_table
where userID in
(
   select userID
   from your_table
   where website in ('website.com', 'foo.com')
   group by userID
   having count(distinct website) = 2
)
于 2013-08-07T13:41:14.423 に答える