常用值b / w字段

时间:2014-02-13 17:33:08

标签: mysql sql join

此表列出了用户和项目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'

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
)

Demo #2.