タイトル通りとなりますが、結合させた状態で片一方にしか存在しないデータ取得を
LEFT JOIN と IS NULL でやろうと考えています。
環境:
"sequelize": "6.18.0", "sequelize-cli": "6.4.1", "sequelize-typescript": "2.1.3", "mariadb": "3.0.0", "typescript": "4.6.3",
studentsテーブルとteachersテーブルが多対多であり、2テーブルを中間テーブルa_students_teachersで紐づけています。
teachersと紐づかないstudentsを取得したいので、外部結合させてIS NULLでとってこれるものを取得したいのですが、うまくいっておらずアドバイス頂きたいです。
各テーブルのDDL
-- students CREATE TABLE `students` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` tinytext NOT NULL COMMENT '学生名', PRIMARY KEY (`id`), UNIQUE KEY `UNQ:students:uuid` (`uuid`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 -- teachers CREATE TABLE `teachers` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` tinytext NOT NULL COMMENT '教師名', PRIMARY KEY (`id`), ) ENGINE=InnoDB AUTO_INCREMENT=824 DEFAULT CHARSET=utf8mb4 -- a_students_teachers CREATE TABLE `a_students_teachers` ( `student_id` bigint(20) unsigned NOT NULL COMMENT '学生ID', `teacher_id` bigint(20) unsigned NOT NULL COMMENT '教師ID', PRIMARY KEY (`student_id`,`teacher_id`), KEY `IDX:a_students_teachers:student_id` (`student_id`), KEY `IDX:a_students_teachers:teacher_id` (`teacher_id`), CONSTRAINT `FK:teachers:a_students_teachers` FOREIGN KEY (`teacher_id`) REFERENCES `teachers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `FK:students:a_students_teachers` FOREIGN KEY (`student_id`) REFERENCES `students` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
SQLのイメージ(下記のSQLと同じことをSequelizeで行いたいです。)
(教師と紐付きがない、受け持ちが決まっていない生徒を出したいです)
select count(distinct students.id) from students left join a_students_teachers on students.id = a_students_teachers.student_id inner join teachers on teachers.id = a_students_teachers.teachers_id where a_students_teachers.teachers_id IS NULL
Repository(Sequelizeで実際に結果取得したいところはここに書いてます)
const count = await StudentModel.count({ distinct: true, col: 'id', where: {corportionId: null} // ここではうまくいかなかった。id にしたりincludeの内側に書いてみたりしたがうまくいっていない include: [ { required: false, model: teacherModel, } ] }); return count;
いい書き方ご存知の方、ご教示くださいm(- -)m
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/04/10 02:51
退会済みユーザー
2022/04/10 04:38
2022/04/10 14:58