1

私はテーブルを持っています

xyz(ユーザーとアイテム間の関係を保存するため)

| user_id |  item_id |
----------------------

アイテムは、1人以上のユーザーとその逆に属することができます。

したがって、user_id=Aおよびuser_id=Bの場合、mysqlクエリを実行して、ユーザーAとユーザーBの両方に属するすべてのアイテムを選択するにはどうすればよいですか?

4

5 に答える 5

4

これを試してください:

SELECT Item_ID
FROM xyz
WHERE  User_ID IN ('A','B')
GROUP BY Item_ID
HAVING COUNT(distinct user_id) = 2

SQLFiddle デモ

于 2012-08-11T11:03:02.850 に答える
1

これで十分です:http ://sqlfiddle.com/#!2/63ad5/6

select item_id
from xyz
group by item_id
having sum(user_id in ('A','B')) = 2

ANSI SQLの方法:

select item_id
from xyz
group by item_id
having sum(case when user_id in ('A','B') then 1 end) = 2
于 2012-08-11T11:09:10.760 に答える
1
SELECT a.item_id
FROM xyz AS a
  JOIN xyz AS b
    ON b.item_id = a.item_id
WHERE a.user_id = 'A'
  AND b.user_id = 'B' ;

の組み合わせが(user_id, item_id)一意でない場合は、それを にしSELECT DISTINCTます。

于 2012-08-11T11:04:42.673 に答える
1

別のオプション:

select item_id from xyx
where item_id IN(select item_id from xyz where user_id ='A')
and item_id IN(select item_id from xyz where user_id ='B')
于 2012-08-11T11:06:51.857 に答える
0

1つの方法は

SELECT temp1.item_id FROM(SELECT DISTINCT item_id FROM pcadminlogging WHERE userid ='A')AS temp1 JOIN(SELECT DISTINCT item_id FROM pcadminlogging WHERE userid ='B')AS temp2 ON temp1.item_id = temp2.​​item_id WHERE temp1.userid in( 'A'、'B')

于 2012-08-11T12:23:15.213 に答える