簡體   English   中英

Sequelize 生成復雜查詢 (SELECT WHERE IN)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM