我拥有具有用户ID和专业知识ID的专业知识表。每个用户可能拥有多种专业知识现在我想让所有必须拥有范围内所有专业知识的用户,如(1,2,3,4,5,......等等)。
IN条件仅用于OR运算,那么如何通过AND运算使用IN条件得到预期结果。或者是否可以使用任何其他操作符或技巧。
编辑:
让我补充一点解释。客户选择物理,数学,化学......等专业知识。所以我有专业知识,我需要从专业知识表中获取满足所有选定专业知识的所有用户ID。所以我需要精通数学,物理,化学等方面的用户。
所有数据都在一个专业知识表中。
当前查询是这样的
从expert_id IN(1,2,3,4)
的专业知识中选择user_id但对于拥有这些专业知识的所有用户都是如此,但我需要拥有所有这些专业知识的所有用户。
答案 0 :(得分:4)
如果我理解正确,你希望返回的所有user_id都具有IN子句中的所有专业知识(可能还有更多)。
如果是这样,请选择users_id,GROUP BY用户ID和COUNT匹配的DISTINCT专业知识ID。返回users_id,以获取那些计数与您要搜索的ID数相同的那些。
SELECT user_id
FROM expertise
WHERE expertise_id IN (1,2,3,4)
GROUP BY user_id
HAVING COUNT(DISTINCT expertise_id) = 4
答案 1 :(得分:0)
您可以验证与您的列表匹配的专家数量,并要求此数字等于列表的大小。这是一个例子,当你所需的专业知识列表有5个元素时:
SELECT *
FROM users
WHERE 5 = (SELECT COUNT(DISTINCT expertise_id)
FROM user_expertises
WHERE user_id = users.user_id
AND expertise_id IN (1, 2, 3, 13, 18))
如果确定user_expertise表没有重复的(user_id,expertise_id)对,则可以用简单的DISTINCT expertise_id
替换*
。
当然,您必须使用正确的表名和列名。这只是一个模板。