从2个不同的数据库中查找2个表之间的内部联接

时间:2017-10-26 09:45:04

标签: mysql database sequelize.js

我目前正在尝试在两个表之间进行内部联接: 第一个是在名为SmartMonument的数据库中,而第二个是在名为SmartMonumentCB的数据库中。

以下是这些表的init的代码:

在'database.js'中(指SmartMonument):

const CompaniesForClient=sequelize.define('cfc', {
    scrapperName: {type: Sequelize.STRING, allowNull: false},
    clientID : {type: Sequelize.INTEGER(10), allowNull: false}
});

CompaniesForClient.sync();
module.exports={sequelize, CompaniesForClient};

第二个表是:

const Companies = sequelize.define('companies', {
    scrapperName: {type: Sequelize.STRING, allowNull: false},
    scrapperAddress: {type: Sequelize.STRING(500)}
});
Companies.sync();
module.exports = {sequelize, Companies};

这两个表都创建得很好,然后我尝试添加一些东西,这样这两个表都与scrapperName字段相关。

我尝试这样做:

   CompaniesForClient.hasOne(CompaniesDB.Companies, {foreignKey: 'scrapperName'});

我的目标是最终能够在一个请求中阅读所有公司领域的所有CompaniesForClient字段,如下所示:

CompaniesForClient.findAll({where:{clientID: param}, include: [{model: Companies}];

现在我收到以下错误:

  

未处理拒绝SequelizeDatabaseError:无法添加外键约束           在Query.formatError(/home/ubuntu/backendDev/node_modules/sequelize/lib/dialects/mysql/query.js:222:16)           在Query.connection.query [as onResult](/home/ubuntu/backendDev/node_modules/sequelize/lib/dialects/mysql/query.js:55:23)           在Query.Command.execute(/home/ubuntu/backendDev/node_modules/mysql2/lib/commands/command.js:30:12)           在Connection.handlePacket(/home/ubuntu/backendDev/node_modules/mysql2/lib/connection.js:515:28)           在PacketParser.onPacket(/home/ubuntu/backendDev/node_modules/mysql2/lib/connection.js:94:16)           在PacketParser.executeStart(/home/ubuntu/backendDev/node_modules/mysql2/lib/packet_parser.js:77:14)           在Socket。 (/home/ubuntu/backendDev/node_modules/mysql2/lib/connection.js:102:29)           在emitOne(events.js:115:13)           在Socket.emit(events.js:210:7)           在addChunk(_stream_readable.js:266:12)           在readableAddChunk(_stream_readable.js:253:11)           在Socket.Readable.push(_stream_readable.js:211:10)           在TCP.onread(net.js:585:20)

1 个答案:

答案 0 :(得分:1)

确保您的外键(如果不是主键)是唯一的,并检查数据库中的数据是否与您要与之关联的表中的数据匹配(当然在外键列中)