오라클 sql 쿼리 질문드립니다 0 4 693

by 안찌 [SQL Developer] [2018.10.01 18:52:07]


db.jpg (170,641Bytes)

현재 상황은 사진과 같습니다.

오른쪽의 쿼리의 결과중 null 값을 제외한 햄 고기 양파 양상추 토마토 치즈 만 뽑고싶은데.. 어떻게해야할지 도통 감이오지않습니다.. 방법이 있을까요?..

by 마농 [2018.10.01 19:21:58]

원하는 결과에 대한 설명이 모호합니다.
null 이 나오는 컬럼을 제외하고 싶은 건가요?
정적 쿼리에서 컬럼을 유동적으로 제어할 수는 없습니다.
1. 최대 가능 갯수 정해서 하는 방법(위에 올리신 쿼리)
2. 아래로 내려서 조회하는 방법(조회 형태 바꾸기)
3. 동적 쿼리를 이용하는 방법


by 안찌 [2018.10.01 20:40:41]

마농님 답변 감사드립니다!

음.. 좀 모호했나요? ㅠㅠ

일단 대충 돌아가는걸 설명드리자면 저 a.hamburger_name 에 빅맥을 입력하면 p1부터 p5 

 고기 양파 치즈 양상추 피클 null null null null null이 출력되며

a.hamburger_name 에 불고기를 입력하면 p1~p6

햄 양파 치즈 양상추 토마토 피클 null null null null이 나옵니다.

즉 입력한 값에따라 p1~p10의 값이 null일수도있고 아닐수도있습니다.

입력한 값에따라 p1~p10의 값이 달라지는 경우 null값만 제외하여 출력하고싶을때 어떻게하는지를 질문드린겁니다 ㅠㅠ

 

추후에 여기서 얻는 값들을 이용해 update문에 포함시키려고합니다. 그래서 null들을 제외한 나머지 값들만 출력하고싶습니다.

간단히만 말하면 본문내용처럼 null값을 제외한 나머지 고기 양파 치즈 양상추 피클 만 출력되길 원합니다..

 

으.. 이렇게 설명드리는게 맞는지 모르겠네요 ㅠㅠㅠ


by 마농 [2018.10.01 23:00:53]

네. 그에 대한 답변 드린 것입니다.


by 봄빛 [2018.10.02 22:32:02]

DB는 postgreSQL 에서 실행했습니다.

마농님 답변에서 두번째 경우를 작성해봤어요




with hambuger_list (name,price) as(
   SELECT '빅맥'   , '6900'   UNION ALL
   SELECT '베토디' , '7000'  UNION ALL
   SELECT '불고기' , '4000' 


)
,hambuger_recipe (name,recipe) as
(
   SELECT '빅맥'   , '고기/양파/치즈/양상추/피클' UNION ALL
   SELECT '베토디' , '햄/고기/양파/양상추/토마토' UNION ALL
   SELECT '불고기' , '햄/고기/양파/양상추/토마토/치즈'        
)

SELECT a.name,UNNEST(STRING_TO_ARRAY( b.recipe ,'/') ) AS RECIPE
FROM HAMBUGER_LIST A
    ,HAMBUGER_RECIPE B
WHERE A.NAME = B.NAME AND A.NAME='빅맥'   
GROUP BY A.NAME,B.RECIPE
ORDER BY 1


결과 :


name  | recipe

빅맥    고기
빅맥    양파
빅맥    치즈
빅맥    양상추
빅맥    피클

 

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