此表列出了用户和项目 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'
最佳答案
尝试使用以字母开头的别名:
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'
两边的单引号。
I want it for n number of users ... a I want the query to return all item_id's that are common among the users
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
)
关于mysql - 字段之间的共同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21761386/