2017-07-14 4 views
0

Sequelize.jsを使用して異なるフィールドセットのAND/OR SQLを生成する方法を理解できません。以下の表(以下を参照)があれば、sequelize.jsを使用して以下のSQLをどのように生成すればよいですか?Sequlize.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') 

FactTable1

  • イド
  • Fact1
  • Fact2
  • FKey_DimTable1
  • FKey_DimTable2

DimTable1

  • イド
  • DIM1

DimTable2

  • イド
  • DIM2

ありがとうございます!

答えて

0

Sequelizeには、親Where句が結合(含まれている)エンティティのプロパティを参照できるように、Top Level Where Clausesという機能があります。上記のクエリは、以下の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' 
    } 
    ] 
}); 
関連する問題