很抱歉,如果这与其他人的问题重复,但我已经在这方面工作了很长时间并且没有找到解决方案。
我有两个表,todo_list
(包含TODO列表列表)和task
(包含TASKS列表,每个表都与一个TODO列表相关联)。 / p>
以下是相关结构:
todo_list
任务
为每个TODO列表分配了多个任务。我希望能够选择删除所有相关任务的TODO列表。我怎么能这样做?
答案 0 :(得分: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
答案 1 :(得分: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)
答案 2 :(得分: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
希望这有帮助