sql,获取聚合列表而不是循环

时间:2017-02-27 08:27:49

标签: mysql sql

我有两张桌子:

  1. 任务列表(id,done)
  2. tasks(id,tasklist_id,done)
  3. 现在我想找到所有设置为0的任务列表,并将其所有任务设置为1,这样我就可以将任务列表设置为1。

    当我逐一浏览每个列表时,我知道如何做到这一点:

    SELECT COUNT(done) 
    FROM tasks
    WHERE done != 1
    AND tasklist_id = 13;
    

    这将检查列表13的所有任务是否已完成,但我想以一种方式获取结果,以显示上述查询的所有列数为0的列表。

    编辑:DB = mysql

    示例数据:

    任务列表:

    id, done
    1, 0
    2, 0
    3, 0
    4, 1
    

    任务:

    id, done, tasklist_id
    1, 1, 1
    2, 0, 1
    3, 1, 2
    4, 1, 2
    5, 1, 3
    6, 1, 4
    

    预期结果:

    tasklist_id
    2
    3
    

    它不应该包括1,因为任务nr。 2(属于列表1)尚未完成,它也应该不包括4,因为列表已经设置为完成。

1 个答案:

答案 0 :(得分:0)

使用not exists确保没有未完成的任务:

select id from tasklists tl where done = 0 and not exists (
    select * from tasks where tasklist_id = tl.id and done = 0
)

此外,通过Update After triggers

实施此检查也许是一个好主意