我在另一个函数中有一个查询,我想在另一个查询的 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/