此表列出了用户和项目ID
user_id item_id
1 1
1 2
1 3
2 1
2 3
3 1
3 4
3 3
如何在此表上运行查询以列出给定用户之间常见的所有项目。
我的猜测是,这需要自我加入,但我不确定。
我正在尝试此查询,但它返回错误
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 :(得分: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都是字符类型。如果不是这种情况,请删除围绕用户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
)