簡體   English   中英

Sequelize Reuse Query 在另一個查詢中

[英]Sequelize Reuse Query in another query

我在另一個 function 中有一個查詢,我想在另一個查詢的 WITH 子句中重用它。 我嘗試了類似下面的代碼。

代碼給出粗略的想法。

const reuseQuery = async (IdType, eventID) => {
    try {
        const sqlQuery = `SELECT *
        FROM TableA TA 
        WHERE TA.IdType = :IdType AND TA.eventID = :eventID`;
        const replacements = {IdType, eventID};
        const result = await this.sequelize.query(sqlQuery, {replacements, type: this.sequelize.QueryTypes.SELECT});
        return result;
    } catch (error) {
        console.log(error);
    }
};


const useReuseQuery = async () => {
    try {
        const sqlQuery = `WITH Query1 AS (${await reuseQuery(1, 1)}),
        Query2 AS (${await reuseQuery(2, 1)})
        Select q1.name AS Captain, q2.name AS Player
        FROM Query1 q1, Query2 q2
        WHERE q1.partnerID = q2.ID AND q2.partnerID = q1.ID`;

        const result = await this.sequelize.query(sqlQuery, {type: this.sequelize.QueryTypes.SELECT});
        return result;
    } catch(error) {
        
    }
};

當我嘗試我得到錯誤

UnhandledPromiseRejectionWarning:TypeError:無法讀取未定義的屬性“查詢”

在第二個 function 中,您將兩個結果集連接到一個查詢字符串中,這將不起作用。 AFAIK,這不會使 SQL 有效。

最好將第一個sqlQuery兩次concat到第二個sqlQuery中,大致如下:

const reusableSqlQuery = `SELECT *
    FROM TableA TA 
    WHERE TA.IdType = :IdType AND TA.eventID = :eventID`;

const useReuseQuery = async () => {
try {
    const sqlQuery = `WITH Query1 AS (` + reusableSqlQuery +`),
    Query2 AS (` + reusableSqlQuery +`)
    Select q1.name AS Captain, q2.name AS Player
    FROM Query1 q1, Query2 q2
    WHERE q1.partnerID = q2.ID AND q2.partnerID = q1.ID`;
    const replacements = {1,1,2,1};
    const result = await this.sequelize.query(sqlQuery, {replacements, type: this.sequelize.QueryTypes.SELECT});
    return result;
} catch(error) {
    
}

};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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