web/node.js

sequelize에서 조인 시 left join이 되지 않을 때 처리하는 방법

반응형

sequelize에서 조인을 할때는 include를 사용해서 다음과 같이 한다.


1
2
3
4
5
6
await This.User.findOne({
  attributes: ['id', ['name''userName']],
  include: [
    { model: this.Dept}
  ]
});
cs

물론 기존에 Model을 define할 때 연관관계를 설정을 해놓은 상태여야 하고 이렇게 할 경우에 나는 left join이 아니라 inner join으로 다음과 같이 되었다.


SELECT id, name as userName FROM User u inner join Dept d on u.userId = d.userId;

그래서 검색해서 알아보다보니 required 옵션을 부여하게 되면 정상적으로 left join이 된다고 알게되었다. 

그래서 붙이니 정상적으로 되었다.


1
2
3
4
5
6
await This.User.findOne({
  attributes: ['id', ['name''userName']],
  include: [
    { model: this.Dept, required: false}
  ]
});
cs


별개로 조인을 하려고 하는데 계속 서브쿼리가 만들어진다면 subquery:false 옵션을 주면 문제를 해결 할 수 있다.

반응형