mysql - Express js + Sequelize 查询

标签 mysql express join model sequelize.js

我在我的项目中使用MySQL数据库。问题考虑复杂的查询,其中 Sequelize 无法正确检测关系。

我有 4 张 table :

Post_code | Building | Flat | Invoice

它们是一对多的关系,如下图所示:

enter image description here

这是我想要执行的 SQL 查询:

SELECT 
   CONCAT(building.name, ' ', flat.number) as 'buildingInfo',
   CONCAT(building.address,' ',post_code.city,' ',post_code.code) as 
   'address',
   IFNULL(invoice.date,'Unknonw') as 'lastInvoiceDate'
FROM building
INNER JOIN post_code ON post_code.id = building.post_code_id
INNER JOIN flat ON building.id = flat.building_id
LEFT JOIN invoice ON flat.id = invoice.flat_id;

连续查询:

models.building.findAll({

    attributes: 
    [
       [Sequelize.fn("CONCAT", Sequelize.col("building.name"),' 
       ',Sequelize.col("flats.number")),'buildingInfo'],
       [Sequelize.fn("CONCAT",Sequelize.col("building.address"),' 
       ',Sequelize.col("post_code.city"),' 
       ',Sequelize.col("post_code.code")),'address'],          
       [Sequelize.fn("IFNULL",Sequelize.col("invoice.date"),'Unknown'),
       'lastInvoiceDate']
    ],

    include:
        [
            {
                model: models.flat,
                required: true
            },
            {
                model: models.post_code,
                required: true
            },
            {
                model: models.invoice,
                required: false
            }
        ]

}).then(function (data){
    // Something here
});

问题考虑:“LEFT JOIN发票ON flat.id =发票.flat_id;”

我收到错误消息,“发票”与“建筑物”无关。

这是事实,因为这种关系没有在构建模型中定义,它仅与 post_code 和 flat 有联系,但当我执行 JOIN 时,我也可以“通过”平面表包含发票表。

如何使用 Sequelize 包含此表?

最佳答案

您的发票模型应包含在平面模型中,如下所示。

{
    model: models.flat,
    required: true,
    include : [{
        model: models.invoice
        required : false
    }]
}

关于mysql - Express js + Sequelize 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49035825/

相关文章:

node.js - Express JS 中用于动态路由的对象数组

sql - 从 24 小时前存在的表中查找用户

sql - 维恩图解释的连接不止一个连接

php - 如何在 MYSQL 或特别是 cake 1.3 中获取父 ID 的子代计数

android - 附近 "COLUMN_NAME": syntax error (code 1) in SQLite

javascript - Jade 复选框选中属性未选中基于条件(如果)

javascript - 路由时 express.js 不显示 console.log 消息

MySQL连接比较: what's faster,什么是正确的?

mysql - 指示未执行任务的日期

php - 根据查询值有条件地格式化字体颜色