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개의 결과값 출력

+ Recent posts