join한 테이블 조회시 컬럼이 겹치는 문제
아래와 같은 코드에서 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'],
});
0
답변 감사합니다. 현재 Dibs 테이블은 아래와 같습니다. 저는 member에 있는 memberId를 기준으로 데이터를 조회하고 싶었습니다. 지금 join한 campground에서도 member를 또 외래키로 쓰고 있습니다. 그래서 join해서 불러온 데이터들에 member가 총 두개가 존재하기 때문에 어떤 member를 인식해야 하는지 typeORM에서 인식하지 못해 발생한 오류 같습니다. 이 경우 해결할 방법이 있을까요?
@Entity()
@ObjectType()
export class Dibs {
@ManyToOne(() => Member)
@PrimaryColumn({ name: 'memberId' })
@JoinColumn({ name: 'memberId' })
@Field(() => Member)
member: Member;
@ManyToOne(() => Campground)
@PrimaryColumn({ name: 'campgroundId' })
@JoinColumn({ name: 'campgroundId' })
@Field(() => Campground)
campground: Campground;
@DeleteDateColumn()
deletedAt: Date;
}
@Entity()
@ObjectType()
export class Campground {
@PrimaryGeneratedColumn('uuid')
@Field(() => String)
campgroundId: string;
@Column({ nullable: false })
@Field(() => String)
campName: string;
@Column({ nullable: false, default: 0 })
@Field(() => Int)
hits: number;
@Field(() => Member)
@JoinColumn({ name: 'memberId' })
@ManyToOne(() => Member)
member: Member;
@DeleteDateColumn()
deletedAt: Date;
}
0
해결되었습니다.
아래와 같이 queryBuilder를 사용해서 join된 테이블에 명확한 이름을 설정해주고 조건식을 사용하니 됐습니다.
result = await this.dibsRepository
.createQueryBuilder('dibs')
.leftJoinAndSelect('dibs.campground', 'campground')
.leftJoinAndSelect('dibs.member', 'dibsMember')
.where('dibsMember.memberId = :memberId', { memberId })
.getMany();
그래프 ql 문서 사용할때 느낌표 남는거 어떻게 없애나요?
0
86
2
강의 전체 소스 코드를 받고싶습니다.
0
77
2
fontawesome 사용 문의
0
80
2
소스 코드 부탁드립니다~
0
87
2
깃 레포지터리 소스
0
87
2
커리큘럼12.css 정렬 에 나오는 과제 정답알고싶어요
0
74
2
10-01 Entity TypeOrmModule.forRoot 에 entities
0
89
3
강의 버전관련 문의입니다
0
104
2
Ubuntu 설치 관련
0
62
1
schema.gql 질문 드립니다.
0
51
1
서버 재실행시 Many to Many
0
102
3
input 관련 문의
0
90
2
Rest API 보다는 graphql이 주된 내용인데
0
134
2
강의 전체 소스코드 받을수있을까요?
0
156
1
도커볼륨 마운트 관련
0
127
2
findOne 타입스크립트오류
0
109
1
http => htrtps 호출 인증서 신뢰 오류
0
356
1
self-signed certificate in certificate chain 에러 발생
0
421
1
mongoose 설치 오류
0
143
1
특정 API, 특정 IP 허용 (단일경로에 CORS 활성화)
0
285
2
08-06
0
180
3
구조랑 패턴 관련해서 질문
0
126
2
mydocker
0
129
2
coolsms statuscode 2000 인데 전송안돼는 경우 확인.
0
156
1





