「SQL초급떼기
[JOIN-LEVEL4]코딩테스트 연습JOIN그룹별 조건에 맞는 식당 목록 출력하기
DayGo
2023. 7. 30. 12:23
https://school.programmers.co.kr/learn/courses/30/parts/17046
3개월만에 다시 푸니 너무 어려웠다!!!
join과 where 절을 같이 활용하는 문제는 항상 헷갈린다.
* 이슈사항
1. where 절에 in을 쓸때는 써브쿼리문에 limit 문이 먹히지 않는다!! syntax 오류남
그리고 where 절에 특정 컬럼이 있는지 in 을 쓸때는 서브쿼리에 반드시 그 컬럼을 포함한 여러 컬럼이 있어도 된다 ㅋ
즉
where member_id in (select member_id , count(*) as cnt, sum(sale) as sales ~~~~~~) 도 가능
-- 에러남 : where member_in (select~~~~ limit 1)
/* select
c1.member_name, c2.review_text,c2.review_date
from MEMBER_PROFILE as c1 inner join
rest_review as c2 on c1.member_id=c2.member_id
where member_id in
(select member_id, count(*) as review_count
from rest_review
group by member_id
order by count(*) DESC
limit 1)
ORDER BY REVIEW_DATE, REVIEW_TEXT */
-- SQL 실행 중 오류가 발생하였습니다.
-- This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
-- in 안에 limit를 쓸수 없다!!!!!
2. 따라서 해당 구문은 where 절에서 in 이 아닌 = 로 바꿔야 하며
특정 컬럼이 같다 이므로! 반드시 서브쿼리에는 그 특정 컬럼만이 존재해야한다!!!!
WHERE c1.member_id = (
select member_id
from rest_review
group by member_id
order by count(REVIEW_ID) DESC
limit 1)
SELECT c1.member_name, c2.review_text,date_format(c2.review_date, '%Y-%m-%d') as review_date_f
FROM MEMBER_PROFILE as c1 inner join rest_review as c2 on c1.member_id=c2.member_id
WHERE c1.member_id = (
select member_id
from rest_review
group by member_id
order by count(REVIEW_ID) DESC
limit 1)
order by date_format(c2.review_date, '%Y-%m-%d') , c2.review_text