Mysql 执行值存在性检查
我对MySQL查询有一点性能问题,不知道如何正确构建它,所以它确实尽可能少地工作 问题: 假设一个表有两列:userint、itemint 用户具有与关联的不同项目。可能用户1有项目1、项目2、项目3,用户2有项目1、项目3、项目4 我想知道的是,对于一个特定的用户-X,如果至少有一个其他用户也有这些项目,那么每个项目都是独立的 我开始的是Mysql 执行值存在性检查,mysql,performance,Mysql,Performance,我对MySQL查询有一点性能问题,不知道如何正确构建它,所以它确实尽可能少地工作 问题: 假设一个表有两列:userint、itemint 用户具有与关联的不同项目。可能用户1有项目1、项目2、项目3,用户2有项目1、项目3、项目4 我想知道的是,对于一个特定的用户-X,如果至少有一个其他用户也有这些项目,那么每个项目都是独立的 我开始的是 SELECT item FROM table WHERE item IN (SELECT item FROM table WHERE user = X) A
SELECT item
FROM table
WHERE item IN (SELECT item FROM table WHERE user = X) AND user != X
GROUP BY item
。。。但这是低效的,因为在这种情况下,查询搜索整个表并检查每个项目,即使每个项目都已找到。
我不能限制查询,因为我不知道user-X实际有多少项。
对于每个项目单独发送一个带有limti1的搜索查询也不是一个好主意
对于抽象,您还可以说我想知道一组item-X、…、item-Y不是顺序或连续编号是否与至少一个用户关联
我一点也不在乎物品的出现频率,只想知道是否至少出现一次
那么,如何才能做到这一点呢?
谢谢你的建议 这是一个简单的拥有,不是吗 给我用户x和至少一个其他用户都拥有的项目
你要找的是条款 如果提供的子查询中有任何匹配行,则其计算结果将为true
SELECT item
FROM table AS t1
WHERE user = X
AND EXISTS ( SELECT * FROM table AS t2 WHERE user <> X AND t1.item = t2.item )
GROUP BY item
SELECT DISTINCT t1.item
FROM table t1
INNER JOIN table t2
ON t1.item = t2.item
AND t1.user <> t2.user
WHERE t1.user = X
SELECT item
FROM table AS t1
WHERE user = X
AND EXISTS ( SELECT * FROM table AS t2 WHERE user <> X AND t1.item = t2.item )
GROUP BY item