【发布时间】:2021-10-28 22:12:27
【问题描述】:
我正在尝试使用 knex 构建查询,但在如何使用条件 EXISTS (SELECT * FROM caregiver_patient WHERE patient_id IN (0,1)) 实现“WHERE”部分时遇到了很多麻烦。
这是关于 SQL 的原始查询:
SELECT * FROM users
JOIN caregivers ON users.id = caregivers.user_id
JOIN caregiver_schedule ON caregivers.id = caregiver_schedule.caregiver_id
JOIN caregiver_patient ON caregivers.id = caregiver_patient.caregiver_id
JOIN patients ON caregiver_patient.patient_id = patients.id
WHERE caregiver_schedule.week_day = 2
AND caregiver_schedule.from_time <= 1320
AND caregiver_schedule.to_time > 1320
AND EXISTS (SELECT * FROM caregiver_patient WHERE patient_id IN (0,1));
这是我目前使用 Knex 的代码:
const caregivers = await db("caregivers")
.whereExists(function () {
this.select("caregiver_schedule.*")
.from("caregiver_schedule")
.whereRaw("`caregiver_schedule`.`caregiver_id` = `caregivers`.`id`")
.whereRaw("`caregiver_schedule`.`week_day` = ??", [Number(week_day)])
.whereRaw("`caregiver_schedule`.`from_time` <= ??", [timeInMinutes])
.whereRaw("`caregiver_schedule`.`to_time` > ??", [timeInMinutes]);
})
.join("users", "caregivers.user_id", "=", "users.id")
.join("patients", "caregiver_patient.patient_id", "=", "patients.id")
.select([
"caregivers.*",
"users.*",
"caregiver_schedule.*",
"patients.*",
]);
原始查询中的所有数字都应该是变量。 IN 里面的数字应该是一个数组。
谁能帮我在 Knex 上完成这个查询?
【问题讨论】:
标签: javascript sql node.js typescript knex.js