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