. 0 5 690

by chap17 [SQL Query] [2017.09.20 22:32:00]


..............

by 마농 [2017.09.21 08:35:05]

group by 사용법이 잘못되어 있습니다.
표준sql 에 어긋나는 사용법입니다.
mysql 에서만 에러가 안나는 구문입니다.
 

SELECT b.*
  FROM (SELECT ssno
             , MAX(ano) ano
          FROM tbl_answer
         GROUP BY ssno
        ) a
 INNER JOIN tbl_answer b
    ON a.ssno = b.ssno
   AND a.ano  = b.ano
;

 


by 마농 [2017.09.21 13:14:32]
SELECT b.*
  FROM (SELECT ssno
             , IFNULL( MAX(CASE uno WHEN 3 THEN ano END)
                     , MAX(ano)
                     ) ano
          FROM tbl_answer
         GROUP BY ssno
        ) a
 INNER JOIN tbl_answer b
    ON a.ssno = b.ssno
   AND a.ano  = b.ano
;

 


by 마농 [2017.09.21 14:25:50]
SELECT s.ssno
     , s.smno
     , s.question
     , s.objective1
     , s.objective2
     , s.objective3
     , s.objective4
     , s.objective5
     , a.ano
     , b.subjectivity
     , b.objectivechoice
     , b.uno
  FROM tbl_survey_sub s
  LEFT OUTER JOIN
       (SELECT ssno
             , IFNULL( MAX(CASE uno WHEN 3 THEN ano END)
                     , MAX(ano)
                     ) ano
          FROM tbl_answer
         GROUP BY ssno
        ) a
    ON s.ssno = a.ssno
  LEFT OUTER JOIN tbl_answer b
    ON a.ssno = b.ssno
   AND a.ano  = b.ano
 WHERE a.smno = 42
 ORDER BY ssno
;

 


by 마농 [2017.09.21 14:47:09]

아우터 조인의 방향이 왔다갔다 하네요?
그런데도 원하던 결과가 나왔다면? 애초에 아우터 조인이 필요 없었다는 거죠.
이너조인으로 바꾸세요. (답변에 해당 조건 추가했습니다.)


by 마농 [2017.09.21 17:28:54]

속도 때문에 바꾸는게 아니라 불필요하기 때문에 바꾸는 것입니다.
속도가 느리더라도 아우터 조인이 필요하다면 이너조인으로 바꾸면 안되죠.
속도는 부수적인 효과입니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입