해결된 질문
작성
·
225
0
아래와 같은 코드에서 memberID를 조건으로 데이터를 조회하면 join된 campground와 member 각각에 member 컬럼이 다 있어 조건으로 넣어준 memberId를 어디서 찾아야 하는지 typeORM에서 인식하지 못하는 것 같습니다. 때문에 아래와 같은 에러가 나오는거 같습니다. 어떻게 해결해야 할까요?
result = await this.dibsRepository.find({
where: {
member: { memberId },
},
relations: ['campground', 'member'],
});
QueryFailedError: Column 'memberId' in where clause is ambiguous
답변 1
0
안녕하세요! Haewoon님!
올려주신 코드에서는 member 테이블의 memberId를 찾고 있네요!
result = await this.dibsRepository.find({
where: {
member: { memberId },
},
relations: ['campground', 'member'],
});
만약, 위 코드에서, campground 테이블에 존재하는 memberId를 찾길 원하신다면 아래와 같이 변경해 보세요!
result = await this.dibsRepository.find({
where: {
campground: { memberId },
},
relations: ['campground', 'member'],
});
만약, 위 코드에서 campground 테이블에 존재하는 memberId를 찾고, dibs 테이블에서 qqq컬럼을, campground 테이블에서 zzz컬럼을 조회하고 싶다면, 아래와 같은 방법을 응용해 보세요!
result = await this.dibsRepository.find({
select: {
qqq: true
campground: { zzz: true }
},
where: {
campground: { memberId },
},
relations: ['campground', 'member'],
});
해결되었습니다.
아래와 같이 queryBuilder를 사용해서 join된 테이블에 명확한 이름을 설정해주고 조건식을 사용하니 됐습니다.
result = await this.dibsRepository
.createQueryBuilder('dibs')
.leftJoinAndSelect('dibs.campground', 'campground')
.leftJoinAndSelect('dibs.member', 'dibsMember')
.where('dibsMember.memberId = :memberId', { memberId })
.getMany();
답변 감사합니다. 현재 Dibs 테이블은 아래와 같습니다. 저는 member에 있는 memberId를 기준으로 데이터를 조회하고 싶었습니다. 지금 join한 campground에서도 member를 또 외래키로 쓰고 있습니다. 그래서 join해서 불러온 데이터들에 member가 총 두개가 존재하기 때문에 어떤 member를 인식해야 하는지 typeORM에서 인식하지 못해 발생한 오류 같습니다. 이 경우 해결할 방법이 있을까요?