[英]Sequelize generate complex query (SELECT WHERE IN)
我需要得到這樣一個復雜的查詢。 檢查用戶對 table1 數據的訪問。 使用 ORM Sequelize js。
SELECT *
FROM table1
WHERE id = 23
AND "table2_id" IN
(SELECT id
FROM "table2"
WHERE "table3_id" IN
(SELECT id
FROM "table3"
WHERE "table_4" IN
(SELECT id
FROM table4
WHERE "table5_id" IN
(SELECT "id"
FROM "table5"
WHERE "userId" = 1))))
我嘗試使用包含參數
const table1_item = await Table1.findOne({
where: {id: id, '$table2.table3.table4.table5.user.id$': user.id},
include: [
{
model: Table2,
attributes: [],
include: [{
model: Table3,
attributes: [],
include: [{
model: Table4,
attributes: [],
include: [{
model: Table5,
attributes: [],
include: [{
model: User,
attributes: [],
}]
}]
}]
}]
}
]
});
但它使用 JOIN 生成查詢。 並且 DB 正在慢慢返回多行數據。
這里唯一的選擇是在where
Sequelize.literal
。 見我的回答對類似的問題
有什么理由不能使用sequelize.query 方法嗎? Sequelize 專門為這樣的復雜查詢提供了它:
const table1_item = await sequelize.query('SELECT *
FROM table1
WHERE id = 23
AND "table2_id" IN
(SELECT id
FROM "table2"
WHERE "table3_id" IN
(SELECT id
FROM "table3"
WHERE "table_4" IN
(SELECT id
FROM table4
WHERE "table5_id" IN
(SELECT "id"
FROM "table5"
WHERE "userId" = 1))));',
{ type: sequelize.QueryTypes.SELECT });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.