2014-02-13 78 views
2

下表列出了用戶和項目ID的共同價值觀的B/W領域

user_id   item_id 
1    1 
1    2 
1    3 
2    1 
2    3 
3    1 
3    4 
3    3 

我怎樣才能運行該表的查詢,列出所有被給予了用戶之間的共同項目。

我的猜測是,這將需要自我加入,但我不確定。

我試圖這樣quering但它返回一個錯誤

SELECT * 
FROM recs 1 
JOIN recs 2 ON 2.user_id='2' AND 2.item_id=1.item_id 
WHERE 1.user_id='1' 
+0

它幫助,如果您還包括你在問題中遇到的錯誤。 :p – neminem

回答

3

嘗試使用一個字母開頭的別名:

SELECT * 
FROM recs r1 
JOIN recs r2 ON r2.user_id='2' AND r2.item_id=r1.item_id 
WHERE r1.user_id='1' 

這將返回

user_id item_id 
------- ------- 
     1  1 
     1  3 

爲您的數據。 Demo on sqlfiddle

注:我在查詢中保留單引號,因爲我假設表中的兩個ID都是字符類型。如果不是這種情況,請刪除用戶標識值爲'1''2'的單引號。

我希望它爲用戶n個......一個我想查詢返回的所有ITEM_ID的,該用戶中很常見

SELECT DISTINCT(r1.item_id) 
FROM recs r1 
WHERE EXISTS (
    SELECT * 
    FROM recs r2 
    WHERE r2.item_id=r1.item_id 
    AND r1.user_id <> r2.user_id 
) 

Demo #2.

+0

非常感謝...但是我希望它有n個用戶...我希望查詢返回所有通常爲黑色的item_id,用戶 – user3307121

+0

@ user3307121查看更新。 – dasblinkenlight

+0

查詢我用 SELECT DISTINCT(r1.item_id) 從區域經濟共同體R1 WHERE EXISTS( SELECT * FROM 經濟共同體R2 WHERE r2.item_id = r1.item_id AND r1.user_id!= r2.user_id 和r2 .item_id!='1' ) – user3307121