javascript - Sequelize Reuse Query 在另一个查询中

标签 javascript sequelize.js

我在另一个函数中有一个查询,我想在另一个查询的 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: Cannot read property 'query' of undefined

最佳答案

在第二个函数中,您将两个结果集连接到一个查询字符串中,这是行不通的。 AFAIK,这不会生成有效的 SQL。
最好将第一个 sqlQuery 两次连接到第二个 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) {
    
}
};

关于javascript - Sequelize Reuse Query 在另一个查询中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62823356/

相关文章:

javascript - "Javascript, The Good Parts": Railroad Diagrams

javascript - Flask 文件未在 Javascript 提取时更新

mysql - Sequelize cli 创建属于用户或员工的关联

javascript - sequelize-auto 将下划线参数传递给所有生成的模型

javascript - 响应不返回数据

javascript - 为什么我的 Sequelize DB 不与 V6 同步?

javascript - 在文档上触发 div mousemove

javascript - 防止编译器将两个动态对象精简为一个

javascript - 如何将渐变的底部锚定到它在 HTML5 Canvas 中填充的容器?

javascript - 如何使用多个表数据仅渲染一次页面而它们之间没有关系?