我正在嘗試使用 knex 構建查詢,但在如何使用條件實作“WHERE”部分時遇到了很多麻煩EXISTS (SELECT * FROM caregiver_patient WHERE patient_id IN (0,1))。
這是對 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 上完成這個查詢嗎?
uj5u.com熱心網友回復:
您提供的示例 knex 查詢與原始 SQL 查詢完全不同,如果您想將其轉換為 knex 查詢,這就是原始 SQL 查詢的樣子:
const result = await db('users')
.innerJoin('caregivers', 'users.id', 'caregivers.user_id')
.innerJoin('caregiver_schedule', 'caregivers.id' 'caregiver_schedule.caregiver_id')
.innerJoin('caregiver_patient', 'caregivers.id', 'caregiver_patient.caregiver_id')
.innerJoin('patients', 'caregiver_patient.patient_id', 'patients.id')
.where('caregiver_schedule.week_day', Number(week_day))
.where('caregiver_schedule.from_time', '<=', timeInMinutes)
.where('caregiver_schedule.to_time, '>', timeInMinutes)
.whereExists(function() {
this.select('*')
.from('caregiver_patient')
.whereIn('patient_id', [0,1]);
})
.select('*');
這假設db變數是您的 knex 連接。我還必須猜測您想用來替換原始 SQL 中的硬編碼值的變數,您可以隨意用您喜歡的任何變數替換這些變數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/340764.html
標籤:javascript sql 节点.js 打字稿 knex.js
