XYZ(存儲用戶和項目之間的關係)
| user_id | item_id |
----------------------
一個項目可以屬於一個或多個用戶和反之亦然。
因此,鑑於USER_ID = A和USER_ID = B我該怎麼辦MySQL查詢選擇所有的項目屬於兩個用戶A和用戶B?
XYZ(存儲用戶和項目之間的關係)
| user_id | item_id |
----------------------
一個項目可以屬於一個或多個用戶和反之亦然。
因此,鑑於USER_ID = A和USER_ID = B我該怎麼辦MySQL查詢選擇所有的項目屬於兩個用戶A和用戶B?
試試這個:
SELECT Item_ID
FROM xyz
WHERE User_ID IN ('A','B')
GROUP BY Item_ID
HAVING COUNT(distinct user_id) = 2
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
。
另一種選擇:
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')
這就夠了: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'y方式:
select item_id
from xyz
group by item_id
having sum(case when user_id in ('A','B') then 1 end) = 2
一種方法可以
SELECT temp1.item_id FROM ( SELECT DISTINCT ITEM_ID FROM pcadminlogging 其中userid = 'A' ) AS temp1中 JOIN( SELECT DISTINCT ITEM_ID FROM pcadminlogging 其中userid = 'B' ) AS TEMP2 ON temp1.item_id = temp2.item_id WHERE temp1.userid在( 'A', 'B')
一些示例數據將是很好 – 2012-08-11 11:03:11