次のようなものが必要だと思います:
SELECT mid
FROM your_table
WHERE uid in ('favour','crackhead','charisma')
GROUP BY mid
HAVING COUNT(*)=3
編集: 2番目の例に基づいて、これはあなたが探しているものです:
SELECT mid
FROM your_table
WHERE uid in ('vweetah', 'crackhead')
GROUP BY mid
HAVING
COUNT(distinct uid)=
(select count(*)
from (select 'vweetah' union select 'crackhead') s)
または、最後のサブクエリを探している要素の数に置き換えることができます。HAVING COUNT(distinct uid) = 2
EDIT2:今、あなたが探しているものを正確に理解しています。これにより、正しい結果が得られるはずです。
SELECT your_table.mid, s.tot_count, count(distinct uid)
FROM
your_table inner join
(select mid, seq, count(distinct uid) tot_count from your_table group by mid, seq) s
on your_table.mid = s.mid and your_table.seq=s.seq
WHERE your_table.uid in ('crackhead')
GROUP BY your_table.mid
HAVING COUNT(distinct uid)=s.tot_count AND COUNT(distinct uid)=1
最後のカウントは、探している要素の数と同じです。これは次のように簡略化できます。
SELECT your_table.mid
FROM your_table
GROUP BY your_table.mid
HAVING
count(distinct uid)=
count(distinct case when your_table.uid in ('vweetah','crackhead','chuks.obima') then your_table.uid end)
and count(distinct uid)=3
すべての uid が同じの下にある場合にグループが閉じていると見なされる場合は、seq
group by を次のように変更しgroup by your_table.mid, your_table.seq
、select を次のように変更する必要があります。SELECT distinct your_table.mid