Node.js/Sequelize
[ORM] ๐ Sequelize - left join ํ๋๋ฒ
์ธํ_
2021. 12. 7. 09:54
Sequelize left join
์ํ๋ผ์ด์ ์์ include๋ ๊ธฐ๋ณธ์ ์ผ๋ก inner join ์ฒ๋ฆฌ์ด๋ค.
๋ค์ ์ฝ๋๋ฅผ ๋ณด์.
[Associate ์ค์ ]
Shop.hasMany(ShopAd, {foreignKey : 'shop_id', as : 'ads'});
ShopAd.belongsTo(Shop, {foreignKey : 'id'})
[ORM]
Shop.findAll({
where: {id:shopId},
include: [{
model: ShopAd,
as: 'ads',
where: { is_valid: 1, is_vertify: 1 }
}]
})
[SQL ๋ก๊ทธ]
SELECT `Shop`.`id`, `Shop`.`user_id`, `Shop`.`short_name`, `Shop`.`description`, `Shop`.`tips`, `Shop`.`city`, `Shop`.`province`, `Shop`.`address`, `Shop`.`logo`, `Shop`.`publicity_photo`, `Shop`.`taobao_link`, `Shop`.`is_vertify`, `Shop`.`create_time`, `Shop`.`update_time`, `ads`.`id` AS `ads.id`, `ads`.`shop_id` AS `ads.shop_id`, `ads`.`pic_url` AS `ads.pic_url`, `ads`.`description` AS `ads.description`, `ads`.`link` AS `ads.link`, `ads`.`is_valid` AS `ads.is_valid`, `ads`.`is_vertify` AS `ads.is_vertify`, `ads`.`create_time` AS `ads.create_time`, `ads`.`update_time` AS `ads.update_time`
FROM `weshop_shop` AS `Shop`
INNER JOIN `weshop_shop_advertsing` AS `ads`
ON `Shop`.`id` = `ads`.`shop_id` AND `ads`.`is_valid`=1 AND `ads`.`is_vertify`=1
WHERE `Shop`.`id`='1';
ํด๋น ๊ด๊ณ๋ฅผ include์ฒ๋ฆฌํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ ค๋ณด๋ฉด inner joinํํ๊ฐ ๋จ์ ์์ ์๋ค.
๋ฐ๋ผ์ left outer join ํํ๋ก ๋ง๋ค๊ธฐ ์ํด์๋, required: false ์ต์ ์ ์ฃผ์ด์ผ ํ๋ค.
Shop.findAll({
where: {id:shopId},
include: [{
model: ShopAd,
as: 'ads',
where: { is_valid: 1, is_vertify: 1 },
required: false // left outer join์ด ๋๊ฒ ํ๋ค.
}]
})