这是我在这里提出的原始问题的扩展:如何从具有一个唯一字段和另一个字段的特定值的表中提取所有行?
我有一个包含两个字段的表:user_id和skill_id。
我想找出skill_id为某个数字的所有行,但我有大量的skill_ids要搜索(~30)。我使用了上面链接的问题中提出的自加入建议,但由于需要寻找很多技能,该查询速度非常慢。
如何查找大量的skill_id而不使查询陷入困境?
编辑:
下面是我要找的一个例子。使用下表,我想提取skill_id为10 AND 11 AND 12等的所有用户行(除了我一次要查找30个技能)。
TABLE
user_id | skill_id
=====================
1 | 10
1 | 11
1 | 12
1 | 13
2 | 10
2 | 12
2 | 13
3 | 15
3 | 16
4 | 10
5 | 45
5 | 46
如果我能很好地理解您的问题,下面的查询可能会对您有所帮助。假设(user_id, skill_id)
是UNIQUE或PK.
SELECT user_id
FROM tab
WHERE skill_id IN (30 entries)
GROUP BY user_id
HAVING SUM(skill_id IN (30 entries)) = 30;
你可以在这里测试。http://www.sqlfiddle.com/#!2/f73dfe/1/0
select user_id
from table
where skill_id IN (10,11,12...)
make suer skill_is被索引为