Node.js 为Sequlize.js中连接/包含的实体上的嵌套和/或表达式生成SQL

Node.js 为Sequlize.js中连接/包含的实体上的嵌套和/或表达式生成SQL,node.js,sequelize.js,Node.js,Sequelize.js,我一辈子都不知道如何使用Sequelize.js为不同的字段集生成和/或SQL。给定下表(见下文),如何使用sequelize.js生成下面的SQL SELECT * FROM FactTable1 JOIN DimTable1 ON FactTable1.FKey_DimTable1 = DimTable1.Id JOIN DimTable2 ON FactTable1.FKey_DimTable2 = DimTable2.Id //Important Part!

我一辈子都不知道如何使用Sequelize.js为不同的字段集生成和/或SQL。给定下表(见下文),如何使用sequelize.js生成下面的SQL

SELECT * 
FROM  FactTable1
      JOIN DimTable1 ON FactTable1.FKey_DimTable1 = DimTable1.Id
      JOIN DimTable2 ON FactTable1.FKey_DimTable2 = DimTable2.Id
//Important Part! Each grouped (ie. in parenthesis) expression below referes to two different tables/aliases.
WHERE (DimTable1.Dim1 = 'Foo' AND FactTable1.Fact1 = 'Bar') OR
      (DimTable2.Dim2 = 'Baz' AND FactTable1.Fact2 = 'Bugz')
事实表1

  • 身份证
  • 事实1
  • 事实2
  • FKey_DIMTABLE 1
  • FKey_DimTable2
DIMTABLE 1

  • 身份证
  • Dim1
DIMTABLE 2

  • 身份证
  • Dim2

提前谢谢

Sequelize有一个功能,如所述,该功能允许父Where子句引用连接(包括)实体的属性。上面的查询由下面的JSON提供服务

db.FactTable1.findAll({
  where: {
    $or: [
      $and:[
        {
          '$dimtable1.Dim1$': 'Foo'
        },
        {
          Fact1: 'Bar'
        }
      ],
      $and:[
        {
          '$dimtable2.Dim2$': 'Baz'
        },
        {
          Fact2: 'Bugz'
        }
      ]
    ]
  }, 
  include: [
    { 
      model: DimTable1,
      required: true,
      as: 'dimtable1'
    },
    { 
      model: DimTable2,
      required: true,
      as: 'dimtable2'
    }
  ]
});