这个问题是对以下各项的扩展:
How to compare two comma-separated string lists using MySQL

我有一个TASKS_DONE表,其中有2列user_idtask_id(INT)。这些代码用于表示用户执行的任务。

单独的表TASKSUSERS用于维护任务和用户的详细信息。

我的要求是检查用户是否已完成一组任务(例如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)将动态提供给查询。这种方法的问题是,如果用户执行了两次相同的任务,则计数将包括任务的两个实例。但是我只需要考虑一组独特的task_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;

关于mysql - 比较列表中的唯一值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14375948/

10-12 12:21
查看更多