select 정렬 질문드립니다. 0 4 551

by 초보개발자001a [SQL Query] [2021.09.08 14:18:08]


aaaa.png (29,082Bytes)

row에 1170 / 1171 / 1173 ... 순으로 진행되고있는데 

 

1171의 custom_u값이 1176 row의 parent_u값으로 들어갔을때

 

1170 / 1171 / 1176 / 1173 순으로 정렬하려면 어떻게해야할까요?

SELECT * FROM Table ORDER BY case when (SELECT parent_u FROM Table WHERE custom_u=parent_u) then parent_u ELSE u end

이렇게 서브쿼리해도 잘 안되네요 ㅠㅠ 
 

 

by 마농 [2021.09.08 15:03:57]
-- MariaDB 10.4 에서 테스트 했습니다. --
WITH t AS
(
SELECT 1170 u, 'test3333' room_id, null parent_u, 'aa' custom_u
UNION ALL SELECT 1171, 'test3333', null, 'bb'
UNION ALL SELECT 1173, 'test3333', null, 'cc'
UNION ALL SELECT 1174, 'test3333', null, 'dd'
UNION ALL SELECT 1175, 'test3333', null, 'ee'
UNION ALL SELECT 1176, 'test3333', 'bb', null
)
SELECT a.u
     , a.room_id
     , a.parent_u
     , a.custom_u
     , b.u
  FROM t a
  LEFT OUTER JOIN t b
    ON a.parent_u = b.custom_u
   AND a.room_id  = b.room_id    -- 조인조건
 WHERE a.room_id  = 'test3333'   -- 검색조건
 ORDER BY IFNULL(b.u, a.u), a.parent_u
;

 


by 초보개발자001a [2021.09.08 15:12:41]

안녕하세요! 먼저 감사드립니다! 그런데 EXPLAIN 돌려봤는데 type이 ALL로 풀스캔돌리더라구요

 

특정 room_id 값을 인덱싱잡아놨는데 왜 안잡힐까요 ..?


by 마농 [2021.09.08 15:10:43]

조인 조건과 검색 조건을 구별해야 합니다.
- 조인 조건은 ON 절에
- 검색 조건은 WHERE 절에


by 초보개발자001a [2021.09.08 15:16:58]

아~ 제가 ON에 넣어버렸었네요 정말감사합니다 배운게너무많았어요 ^^아우터조인은 속도가 느려서 안좋다생각했는데 잘못된 생각이였네요 정말 다시한번 감사드려요! 좋은하루되세요!! 

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