서브 쿼리 관련해서 질문입니다. 0 1 717

by alues [SQL Query] [2019.05.07 23:56:41]


대부분 쿼리를 짤 때 보면

EX1)

SELECT A.NAME
   ,   A.CODE
   ,   MAX(SELECT B.ADDRS FROM TEST2 B WHERE B.CODE = A.CODE) 
    FROM TEST1 A
GROUP BY A.NAME, A.CODE

EX2)
SELECT DISTINCT
          A.NAME
      ,   A.CODE
      ,  (SELECT MAX(B.ADDRS) FROM TEST2 B WHERE B.CODE = A.CODE) 
    FROM TEST1 A

EX1을 많이 사용하던데

최근에 쿼리를 짜다보니 저렇게 서브쿼리로 MAX를 하면 나머지 항목들을 GROUP BY이나 MAX로 처리해야해서

생각을 해보니 EX2처럼 짜도 데이터에 따라서 값이 맞는경우도 있어서 사용을 하는데

EX2 쿼리가 뭔가 문제가 있을거 같은데

어떤경우에 EX1을 EX2를 쓰는지 감은 조금 잡히는데

정확한 예시를 못 찾겠습니다.

문제가 있을걸로 보이는데 가르쳐 주시면 감사하겠습니다!!!

by 마농 [2019.05.08 09:11:06]

EX1, EX2 둘 다 올바른 경우는 아닌 듯 합니다.
EX1 은 괄호 부족으로 문법 오류인데, 괄호를 친다고 해도 MAX는 의미가 없습니다.
EX2 는 굳이 GROUP BY 대신 DISTINCT 를 할 필요가 있는지 모르겠구요.
MAX 를 안으로 넣었는데? test2 의 code 가 키라면? MAX 는 불필요합니다.
키가 아니라면? 단순 MAX 가 원하는게 맞는지는 업무적인 관점으로 판단해야 합니다.
 

SELECT a.name
     , a.code
     , (SELECT b.addrs FROM test2 b WHERE b.code = a.code) addrs
  FROM test1 a
 GROUP BY a.name, a.code
;

 

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