[英]How to do INNER JOIN on two tables without common columns using Sequelize in Nodejs?
我有兩張桌子。
活動
ID | 原因 | 目標類型 | 目標 |
---|---|---|---|
1 | 5 | 0 | 5000 |
2 | 4 | 1 | 34500 |
3 | 5 | 1 | 50000 |
4 | 1 | 0 | 9000 |
5 | 8 | 1 | 35000 |
6 | 3 | 1 | 60000 |
Model 定義為:
module.exports = (sequelize, Sequelize) => {
const Campaigns = sequelize.define('Campaigns', {
id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true },
cause: Sequelize.INTEGER,
goalType: Sequelize.INTEGER,
target: Sequelize.FLOAT,
}, {
freezeTableName: true,
});
return Campaigns
}
Campaign_Tasks
ID | uuid | 行動 | 地位 | 用戶身份 |
---|---|---|---|---|
1 | 001-0000004 | 2 | 0 | 50 |
2 | 001-0000004 | 1 | 4 | 60 |
3 | 001-0000003 | 2 | 7 | 50 |
4 | 001-0000007 | 0 | 10 | 40 |
5 | 001-0000010 | 1 | 3 | 30 |
6 | 001-0000003 | 0 | 5 | 50 |
Model 定義為:
module.exports = (sequelize, Sequelize) => {
const Campaign_Tasks = sequelize.define('Campaign_Tasks', {
id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true },
userId: Sequelize.INTEGER,
uuid: Sequelize.STRING,
action: Sequelize.INTEGER,
status: Sequelize.INTEGER,
}, {
freezeTableName: true,
});
return Campaign_Tasks
}
tasks 表中的每個 UUID 對應於campaign 表中的 id(每個 UUID 都是由 id 間接生成的,這個過程是可逆的)。 但可以看出,兩個表中都沒有公共列。 我需要根據活動表中的 id 和活動表中的 uuid 找到這兩個表的內連接(其中 uuid 不是活動表的 PK)
通過遵循本教程: https://lorenstewart.me/2016/09/12/sequelize-table-associations-joins/我創建了一個數據庫 object。 這是必要的,因為我無法在 model 文件中定義關聯,因為我不斷收到此處提到的錯誤: hasMany 調用的東西不是 Sequelize.Model 的實例
const db = require('./models/index')
const db_ = {};
db_.Sequelize = db.Sequelize;
db_.sequelize = db.sequelize;
//Models/tables
db_.campaigns = require('./models/campaigns')(db.sequelize, db.Sequelize);
db_.campaign_Tasks = require('./models/campaignTasks')(db.sequelize, db.Sequelize);
//Relations
db_.campaign_Tasks.belongsTo(db_.campaigns);
db_.campaigns.hasMany(db_.campaign_Tasks);
module.exports = db_;
我怎樣才能對這兩個表進行內部聯接。 我正在尋找這樣的東西:
const uuidToId = require('../../helpers/uuidToId')
let rows = await db_.campaign_Tasks.findAll({
include: [{
model: db_.campaigns,
required: true,
where: {
id: uuidToId.uuidToId(/*<-uuid from campaign_Tasks rows->*/)
}
}]
})
uuidToId 將 UUID 轉換回 id。 提前致謝。
我想到了三個解決方案:
我從來沒有使用過交叉連接,因為我試圖讓我的查詢盡可能簡單,因為它允許我緩存中間結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.