Mysql 比较列表中的唯一值
这个问题是下列问题的延伸: 我有一个Mysql 比较列表中的唯一值,mysql,Mysql,这个问题是下列问题的延伸: 我有一个TASKS\u DONE表,它有两列user\u id和task\u id(INT)。这些代码用于表示用户执行的任务 使用单独的表任务和用户来维护任务和用户的详细信息 我的要求是检查用户是否完成了一组任务(比如2,3,5)。目前,我有以下问题: select * from USERS u where ( select SUM( IF(task_id in (2, 3, 5), 1, 0) ) from TASKS_DONE td
TASKS\u DONE
表,它有两列user\u id
和task\u id
(INT)。这些代码用于表示用户执行的任务
使用单独的表任务
和用户
来维护任务和用户的详细信息
我的要求是检查用户是否完成了一组任务(比如2,3,5
)。目前,我有以下问题:
select * from USERS u
where
(
select SUM( IF(task_id in (2, 3, 5), 1, 0) )
from TASKS_DONE td
where td.user_id=u.user_id
group by td.user_id
) = 3
计数(
3
在本例中)将动态地输入查询。这种方法的问题是,如果用户已执行同一任务两次,则计数将包括该任务的两个实例。但我只需要考虑一组不同的代码> TaskSuthID请帮助。
试试这个:SELECT user_id
FROM users
JOIN (
SELECT task_id, user_id
FROM tasks
WHERE task_id IN (2, 3, 5)
GROUP BY task_id, user_id
) AS unique_tasks USING (user_id)
GROUP BY user_id
HAVING COUNT(user_id) = 3
然后再次将此结果集与用户
连接,以检索更多信息:
SELECT users.*
FROM users
JOIN (
SELECT user_id
FROM users
JOIN (
SELECT task_id, user_id
FROM tasks
WHERE task_id IN (2, 3, 5)
GROUP BY task_id, user_id
) AS unique_tasks USING (user_id)
GROUP BY user_id
HAVING COUNT(user_id) = 3
) AS selected_users USING (user_id)
试试这个:
SELECT user_id
FROM users
JOIN (
SELECT task_id, user_id
FROM tasks
WHERE task_id IN (2, 3, 5)
GROUP BY task_id, user_id
) AS unique_tasks USING (user_id)
GROUP BY user_id
HAVING COUNT(user_id) = 3
然后再次将此结果集与用户
连接,以检索更多信息:
SELECT users.*
FROM users
JOIN (
SELECT user_id
FROM users
JOIN (
SELECT task_id, user_id
FROM tasks
WHERE task_id IN (2, 3, 5)
GROUP BY task_id, user_id
) AS unique_tasks USING (user_id)
GROUP BY user_id
HAVING COUNT(user_id) = 3
) AS selected_users USING (user_id)
我想它们是有一席之地的,但是协同子查询看起来太恶心了
SELECT u.*
FROM users u
JOIN tasks_done td
ON td.user_id = u.user_id
AND td.task_id IN (2,3,5)
GROUP
BY u.user_id
HAVING COUNT(DISTINCT td.task_id) = 3;
我想它们是有一席之地的,但是协同子查询看起来太恶心了
SELECT u.*
FROM users u
JOIN tasks_done td
ON td.user_id = u.user_id
AND td.task_id IN (2,3,5)
GROUP
BY u.user_id
HAVING COUNT(DISTINCT td.task_id) = 3;
“这种方法的问题是,如果用户执行同一任务两次,计数将包括任务的两个实例。”@草莓,你能对此发表评论吗?@YaK你是说它不起作用,还是说它效率低下?这对我来说很好me@YaK ? 但这正是OP想要的!?!我道歉。我没有注意到
DISTINCT
子句。我甚至不知道这是可能的@通常,这个查询比我的查询更可取。草莓,请编辑你的答案,这样我就可以投票了。“这种方法的问题是,如果用户执行了两次相同的任务,计数将包括任务的两个实例。”@草莓,你能对此发表评论吗?@YaK你是说它不起作用,还是说它效率低下?这对我来说很好me@YaK ? 但这正是OP想要的!?!我道歉。我没有注意到DISTINCT
子句。我甚至不知道这是可能的@通常,这个查询比我的查询更可取。草莓,请编辑你的答案,这样我就可以投票了。