Operand should contain 1 column(s)
- 상황 : kakaopay로 결제한 유저들의 정보를 보기 위한 쿼리작성 중 오류발생
Operand should contain 1 column(s) 에러는 주로 where 절에 서브쿼리 작성 로류로 발생
#에러 코드
select u.user_id, u.name, u.email from users u
where user_id in (
select * from orders o
where payment_method = 'kakaopay'
);
- 원인 : 서브쿼리의 반환 값이 한개인지 확인할 것
- 해결방법
# 수정코드 1 (서브쿼리 이용) - 서브쿼리의 반환값이 컬럼 1개로 조건 충족
select u.user_id, u.name, u.email from users u
where user_id in (
select user_id from orders
where payment_method = 'kakaopay'
);
# 수정코드 2 (join 사용)
select DISTINCT u.user_id, u.name, u.email, o.payment_method from users u
inner join orders o
on u.user_id = o.user_id
where o.payment_method = 'kakaopay';
- 서브쿼리 사용시 출력값에 orders 테이블에 있는 payment_method를 가져오려하자
참조에러가 발생했음.
# 에러코드 - 참조가 되지않음
Unknown column 'o.payment_method' in 'field list'
- 따라서 orders 테이블의 정보가 필요할 경우 join을 사용하여 해결하는 방법을 사용
** 메모 **
서브쿼리가 익숙하지 않아 join을 쓰지 않고도 orders 테이블의 값을 불러 올 수 있는 경우의 해결방법을 찾지 못한건지
서브쿼리의 특성이 그런것인지는 좀더 공부해볼 필요가 있음
어떤상황에 join or subquery를 사용해야 할지 알아볼 것
** 메모 2 **
join사용시 distinct를 사용하여 user_id의 중복값을 제거해주지 않으면
56개의 결과값이 출력됨
중복 제거시 51개의 결과값 출력
'프로그래밍 > 개발이슈' 카테고리의 다른 글
AWS_SECRET_ACCESS_KEY 확인 방법 (0) | 2022.04.26 |
---|---|
pip 폴더 삭제 됨 (pip 설치 방법) (0) | 2022.04.25 |
No module named 'flask' - ubuntu 에러 (0) | 2022.04.13 |
파이참- venv 폴더가 없는 경우 (0) | 2022.04.13 |
STS4 설치 후 Spring Legacy Project 최초 생성 오류 (0) | 2022.03.21 |