2016-08-12 44 views
2

where子句在內部連接中使用。 我的查詢是查詢哪裏關聯在續集?

SELECT Cou.country_id,cou.country_name, Sta.state_id, Sta.state_name 
FROM hp_country Cou 
INNER JOIN hp_state Sta ON Cou.country_id = Sta.hp_country_id 
WHERE (Cou.country_status=1 AND Sta.state_status=1 AND Cou.country_id=1) 
AND (Sta.state_name LIKE '%ta%'); 

我sequelize代碼寫的是

hp_country.findAll({ 
    where: { 
     '$hp_state.state_status$': 1 
    }, 
    include: [ 
     {model: hp_state} 
    ] 
}) 

它產生的錯誤是:

SELECT `hp_country`.`country_id`, `hp_country`.`country_name`, `hp_country`.`country_status`, `hp_country`.`created_date`, `hp_country`.`update_date` FROM `hp_country` AS `hp_country` WHERE `hp_state`.`state_status` = 1; 
Unhandled rejection SequelizeDatabaseError: ER_BAD_FIELD_ERROR: Unknown column 'hp_state.state_status' in 'where clause' 

回答

2

你Sequelize代碼應該是這樣的:

hp_country.findAll({ 
    attributes: ['country_id', 'country_name'], 
    where: { 
     country_status: 1, 
     country_id: 1 
    }, 
    include: [{ 
     model: hp_state, 
     attributes: ['state_id', 'state_name'], 
     where: { 
      state_status: 1, 
      state_name: { 
       $like: '%ta%' 
      } 
     } 
    }] 
}); 

要選擇例如只有一些屬性,您可以使用attributes選項。 where子句應該在include聲明中移動,因爲您使用的條件與hp_state模型相關。

+0

,感謝您的答覆,我知道你都貼什麼,但我想在狀態COUNTRY_ID的列名包括框,因爲我要檢查這種情況下,看這裏[ (Cou.country_status = 1 AND St​​a.state_status = 1 AND Cou.country_id = 1) AND(Sta.state_name LIKE'%ta%');] –

+0

@SimhaChalam看來我還沒有正確理解你,已經更新了上面的代碼以滿足您的所有條件。 –

+0

ok .. thanq .. so much alex M –

1
hp_country.findAll({ 
where: { 
    //main AND condition 
    $and: [ 
     //first joint condition 
     { 
      $and: [ 
       { country_status: 1 }, 
       { country_id: country_id }, 
       Sequelize.literal("hp_states.state_status = 1"), 
       Sequelize.literal("`hp_states.hp_districts`.`district_status`=1"), 
       Sequelize.literal("`hp_states.hp_districts.hp_cities`.`city_status`=1"), 
       Sequelize.literal("`hp_states.hp_districts.hp_cities.hp_locations`.`location_status`=1"), 
       Sequelize.literal("`hp_states.hp_districts.hp_cities.hp_locations.hp_sub_locations`.`sub_location_status`=1"), 
       Sequelize.literal("`hp_states.hp_districts.hp_cities`.`city_name` LIKE '%"+city+"%'") 


      ] 
     }, 

     { 
      $or: [ 
       Sequelize.literal("`hp_states.hp_districts.hp_cities.hp_locations`.`location_name` LIKE '%"+query+"%'"), 
       Sequelize.literal("`hp_states.hp_districts.hp_cities.hp_locations.hp_sub_locations`.`sub_location_name` LIKE '%"+query+"%'"), 
       Sequelize.literal("`hp_states.hp_districts.hp_cities.hp_locations.hp_sub_locations.hp_property`.`property_name` LIKE '%"+query+"%'"), 
       Sequelize.literal("`hp_states.hp_districts.hp_cities.hp_locations.hp_sub_locations.hp_property.hp_builder`.`builders_name` LIKE '%"+query+"%'") 

      ] 
     } 
    ] 
}, 
attributes: ['country_id', 'country_name'], 
required:true, 
include: [ 
    { 
     model: hp_state, 
     attributes: ['state_id', 'state_name'], 
     required:true, 

     include: [ 
      { 
       model: hp_district, 
       attributes: ['district_id', 'district_name'], 
       required:true, 
       include: [ 
        { 
         model: hp_city, 
         attributes: ['city_id', 'city_name'], 
         required:true, 

         include: [ 
          { 
           model: hp_location, 
           attributes: ['location_id', 'location_name'], 
           required:true, 
           include: [ 
            { 
             model: hp_sub_location, 
             attributes: ['sub_location_id', 'sub_location_name'], 
             required:true, 
             include: [ 
              { 
               model: hp_property, 
               attributes: ['property_id', 'property_name'], 
               required: true, 
               include: [ 
                { 
                 model:hp_builders, 
                 attributes: ['builders_id', 'builders_name'], 
                 required: true 

                } 
                ] 
              } 
              ] 


            }] 

          }] 

        }] 
      } 
     ] 
    } 
] 

})