1

抱歉,如果这重复了其他人的问题,但我已经研究了很长时间,但还没有找到解决方案。

我有两个表,todo_list(其中包含一个 TODO 列表的列表)和task(其中包含一个任务列表,每个都与一个 TODO 列表相关联)。

这是相关的结构:

待办事项列表

  • ID

任务

  • ID
  • todo_list_id (与 todo_list 中id相同
  • 已删除(为 0 或 1)

多个任务分配给每个 TODO 列表。我希望能够选择删除所有关联任务的 TODO 列表。我怎样才能做到这一点?

4

3 回答 3

2

您可以使用仅指定未删除任务的连接条件进行左连接。然后,未连接的行将是那些没有任务的行deleted = 0

SELECT todo_list.* FROM todo_list
LEFT JOIN task ON todo_list.id = task.todo_list_id && task.deleted = 0
WHERE task.todo_list_id IS NULL
于 2013-02-06T04:03:42.753 回答
1

我认为这些类型查询的最佳方法是聚合:

select todo_list_id
from task t
group by todo_list_id
having sum(deleted) = count(*)

或者,替代having条款是:

having max(case when deleted = 0 then 1 else 0 end) = 0

如果您尝试获取所有任务都已删除或取消删除的列表,则以下having子句有效:

having min(deleted) <> max(deleted)
于 2013-02-06T03:50:50.373 回答
0

试试这个查询

select distinct tl.id, tName from todo_list tl, task t where 
tl.id=t.todo_list_id and
tl.id not in (select todo_list_id from task where deleted =1);

注意:假设删除的记录的值为 0,如果它是 1,则在查询中将值更改为 0

http://sqlfiddle.com/#!2/01b27/9

希望这可以帮助

于 2013-02-06T04:01:12.887 回答