MySQL - 选择表中的记录,其中另一个表中的任何关联记录都不等于某个值

时间:2013-02-06 03:40:45

标签: mysql sql select

很抱歉,如果这与其他人的问题重复,但我已经在这方面工作了很长时间并且没有找到解决方案。

我有两个表,todo_list(包含TODO列表列表)和task(包含TASKS列表,每个表都与一个TODO列表相关联)。 / p>

以下是相关结构:

todo_list

  • ID

任务

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

为每个TODO列表分配了多个任务。我希望能够选择删除所有相关任务的TODO列表。我怎么能这样做?

3 个答案:

答案 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

希望这有帮助