mysql - 字段之间的共同值

标签 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'

最佳答案

尝试使用以字母开头的别名:

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
)

Demo #2.

关于mysql - 字段之间的共同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21761386/

相关文章:

php - 为什么调用 session 不起作用? (代码点火器 3)

php - 通过比较表列中的特定日期来获取当前日期记录之前的 x 天

sql - 如何在 SQL 数据库中创建记录之间的关系?

mysql - 使用许多 where 和having 子句将多行连接为列

python - python 查找具有相似列的两个表之间缺失的数据

php - 按关键字搜索 SQL 查询

mysql - 使用 GROUP BY/HAVING,但随后扩展结果

php - phpMyAdmin 中的 MySQL 条目

c# - 为什么 ToPagedList 在一个空的 IQueryable 上花费半分钟,而底层 SQL 只运行一秒钟?

mysql - 避免使用 INNER JOIN + ORDER BY 进行文件排序