SubQuery 작성위치
SubQuery를 작성하는 위치로는 SELECT, FROM, WHERE가 있습니다. 그중에 SELECT와 FROM에서 발생한 오류를 정리해 보려 합니다.
- SELECT에서 SubQuery 작성하기
select 안에 select를 작성할 때는 결과 값이 1행이어야만 합니다.
idx | title | name | number |
1 | 안녕 | 홍길동 | 20 |
2 | 하세요 | 아무개 | 30 |
SubQuery 결괏값이 2행인 테이블
SubQuery 결과가 위의 표처럼 1행 이상일 경우에 아래와 같은 오류가 발생합니다. 혹시 아래와 같은 오류가 난다면 SELECT문 결과 값이 1행인지 확인해 보시기 바랍니다.
발생오류
Error Code: 1242. Subquery returns more than 1 row
- FROM에서 SubQuery 작성하기
from에서 select 문을 사용한다면 대게 JOIN에서 사용이 됩니다.
SELECT b.idx, b.title, b.category_id, bi.path as main_image, bl.likes
FROM books as b LEFT
JOIN (SELECT book_id, path, main FROM book_images WHERE main = 1) as bi
ON b.idx = bi.book_id LEFT
JOIN (select book_id ,count(*) as likes FROM likes GROUP BY book_id) as bl
ON b.idx = bl.book_id
위 예시를 통해서 FROM 안에 SELECT를 확인해 보자 오류가 나기 쉬운 부분은 바로 FROM 안 SELECT에서 데이터를 전부 가져오지 않았는데 WHERE절에 가져오지 않은 데이터 칼럼을 사용하게 되면 아래와 같은 에러가 발생합니다.
그리고 as를 통해서 테이블 명을 변경하였다면 어느 테이블에서 어떤 데이터를 가져오는지 명시해 주는 게 좋습니다. books 테이블을 b로 가져왔다면 books 테이블의 칼럼들은 b.title, b.category_id가 되는 것입니다. 다른 테이블도 마찬가지로 book_images 테이블을 bi로 정했다면 book_images의 테이블을 칼럼들을 부를 때는 bi.path로 정해 주어야한다. 특히 ON 작성할때 어느 테이블의 어떤 값인지 확실하게 해주어야 아래와 같은 에러가 발생하지 않습니다.
Error Code: 1052. Column 'book_id' in on clause is ambiguous
'프로젝트 > 2.book-store-project' 카테고리의 다른 글
[issue] FK 설정 시, 테이블이 생성이 안됨. (0) | 2024.01.02 |
---|---|
Book Store API 개발 프로젝트 (0) | 2024.01.02 |