1

これが他の誰かの質問と重複する場合は申し訳ありませんが、私はこれに長い間取り組んできましたが、解決策が見つかりませんでした.

todo_list(TODO リストのリストを含む) とtask(それぞれが TODO リストの 1 つに関連付けられている TASKS のリストを含む) の2 つのテーブルがあります。

関連する構造は次のとおりです。

todo_list

  • 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);

注: 削除されたレコードの値が 1 の場合、値が 0 になると仮定すると、クエリで値を 0 に変更します。

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

お役に立てれば

于 2013-02-06T04:01:12.887 に答える