当有多个条件需要考虑时,如何编写查询?

时间:2017-05-06 10:53:48

标签: mysql

我有一个用户被分配任务的表。他们可能在表中有1行或多达5行 - 没有最大值或最小值 - 它是随机的。如果用户已完成所有任务,则需要从电子邮件列表中删除其电子邮件。问题是用户可能有一个任务或2,3等。我不能编写一个在任务字段中查找其ID的简单查询,因为即使他们只完成了1个任务,它也会找到它们。因此,我需要编写一个查询,只有在完成所有任务后才能找到他们的电子邮件。

示例表:

用户ID -----任务
1 ---------- 0

2 ---------- 0

3 ---------- 1

3 ---------- 0

3 ---------- 0

4 ---------- 1

因此,正如您所看到的,用户1只有一个任务,但用户3有3个任务。

如果我使用此查询,即使用户3仍有完成任务,也会从列表中删除用户3:

SELECT userID from table_name
where task = 1

我的实际查询比这更复杂,但是我如何编写一个查找任何已完成所有任务的用户ID的查询?

我尝试了这个但是没有用:

SELECT userID from table_name
where task = 1
and task != 0

2 个答案:

答案 0 :(得分:0)

尝试此查询:

'use strict';

angular.module('image.directives').directive('testDragEnd', function() {
    return {
        restrict: 'A',
        link: function(scope, element, attrs) {
            element.on('$md.dragend', function() {
                console.info('Drag Ended');
            })
        }
    }
})

SELECT userID FROM table_name GROUP BY userID HAVING SUM(CASE WHEN task = 0 THEN 1 ELSE 0 END) = 0 子句将聚合每个用户的记录,并计算未完成任务(由HAVING表示)发生的次数。如果除了0和1之外还有其他任务代码,则可以用task=0替换逻辑。

答案 1 :(得分:0)

检查是否有不完整的任务

SELECT tn.userID from table_name tn
where tn.task = 1
  and not exists ( select 1 from table_name tn2
                   where tn1.userID = tn2.userID
                       and tn.task = 0 )