1

2つのテーブルがあります。1つはチェックリストの項目(checklist_id、content)を含み、もう1つはユーザーとチェックリストの項目番号(checklist_fk、user_fk)の関係を含みます。ユーザーがアイテムをチェックオフするたびに、ユーザー15がアイテム3を完了したことを示す行が挿入されます。

これを照会するとき、私は使用しています

SELECT content, user_fk, checklist_id, checklist_fk
  if (checklist_fk is null, false, true) completed
  FROM checklist
  LEFT JOIN checklist_completion ON checklist_id = checklist_fk;

ただし、任意のユーザーが特定のチェックリスト項目を完了した場合、completedはtrueを返します。結合の前に2番目のテーブルWHEREuser_fk= XXをフィルタリングする必要がありますが、どうすればよいですか?HAVING user_fk = XXを使用することになっていると思いますが、構文エラーが発生します。

4

1 に答える 1

2

特定のユーザーをターゲットにしている場合は、その条件を次のLEFT JOINように追加する必要があります。

SELECT content, checklist_id, checklist_fk AS completed
FROM checklist
LEFT JOIN checklist_completion ON checklist_id = checklist_fk AND user_fk = 123

ところで、お気づきかもしれませんが、コード内の状態をIF簡単に確認できるため、ステートメントを削除しました。NULL

于 2012-08-27T02:32:24.240 に答える