join 관련질문 0 8 1,911

by 생각하쟈 [MySQL] join [2015.06.08 10:55:49]


join관련질문.PNG (9,168Bytes)

SELECT a.post_date, a.post_content, a.post_status, b.meta_value AS sales_point
FROM bmc_posts AS a
INNER JOIN bmc_postmeta AS b ON a.ID = b.post_id
WHERE b.meta_key = 'bmc_sale_point'

 

안녕하세요 오늘 처음 가입 하고 처음 글 써봅니다 ^^

다름이 아니라 조인관련질문인데요 코드를 보시면 b의 meta_key 값이 'bmc_sale_point'인 것을 가져옵니다

근데 저는 bmc_sale_point 말고도 많은 meta_key들이 있습니다 예를들면 .bmc_sale_corp .bmc_sale_store  

등 개내들도 같이 가져오게 하고싶은데 이름은 다르게 어떻게 해야되나요?

저위의 구문에서 만들어진것 옆에 bmc_sale_corp가 생기고 bmc_sale_store 가 생겨서 그 값을 가져오고싶습니다

알려주십시요 감사합니다

by swlee710 [2015.06.08 11:01:36]
WHERE b.meta_key in ('bmc_sale_point', 'bmc_sale_corp', 'bmc_sale_store')

by 생각하쟈 [2015.06.08 11:14:58]

답변 정말 감사드립니다

혹시 각각의 'bmc_sale_point', 'bmc_sale_corp', 'bmc_sale_store' 에 다른이름을 줄수는 없나요?

 

 


by 생각하쟈 [2015.06.08 11:19:28]

ㅠ.ㅠ. 옆으로 붙이는건 안되는건가봐요,,? ㅠ.ㅠ. 죽고싶다 

빠른 답변 감사합니다.


by 창조의날개 [2015.06.08 11:28:28]

-- a.post_date, a.post_content, a.post_status 기준으로
-- bmc_sale_point, bmc_sale_corp, bmc_sale_store들은 하나씩만 있다는 전제

SELECT a.post_date, a.post_content, a.post_status
     , max(decode(b.meta_key,'bmc_sale_point',b.meta_value)) AS sales_point
     , max(decode(b.meta_key,'bmc_sale_corp',b.meta_value)) AS sale_corp
     , max(decode(b.meta_key,'bmc_sale_store',b.meta_value)) AS sale_store
FROM bmc_posts AS a
INNER JOIN bmc_postmeta AS b ON a.ID = b.post_id
WHERE b.meta_key IN ('bmc_sale_point','bmc_sale_corp','bmc_sale_store')
GROUP BY a.post_date, a.post_content, a.post_status
;

 


by 생각하쟈 [2015.06.08 12:00:54]

진심으로 거의 80% 해결한것 같습니다 진심 감사드립니다 문제는

max는 필요 없어서 뺏고 mysql이라서 decode 대신 if문을 사용했습니다.

SELECT a.post_date, a.post_content, a.post_status
     , IF(b.meta_key='bmc_sale_point',b.meta_value,'false') AS sales_point
     , IF(b.meta_key='bmc_sale_corp',b.meta_value,'false') AS sale_corp
     , IF(b.meta_key='bmc_sale_store',b.meta_value,'false') AS sale_store
FROM bmc_posts AS a
INNER JOIN bmc_postmeta AS b ON a.ID = b.post_id
WHERE b.meta_key IN ('bmc_sale_point','bmc_sale_corp','bmc_sale_store')
GROUP BY a.post_date, a.post_content, a.post_status

이런식으로 바껏고요 문제는 첫번째 두번째 값이 false를 반환 하는것입니다...

그래서 그룹by를 지워봤더니 값이 다 잘 들어갑니다 그니까 합치는 과정에서 false로 합쳐지는것입니다.. 혹시 다른 해결방법이 있나요?

진짜 진심 감사드립니다 


by 생각하쟈 [2015.06.08 12:11:45]

아 그래서 max를 넣는건가? 근데 값이 숫자만 있는것이 아니라 문자도 있는데 맥스를 쓰면 안되지 않나요?


by 생각하쟈 [2015.06.08 13:44:16]

창조의 날개님 진심 감사합니다 해결했습니다 그냥 님 코드 그대로 하면 되는거였어요

 

괜히 제가 고쳤네요 진심 감사합니다 진심 사랑합니다 만수무강 하세요

정말 와 진짜 감사합니다 몸조심하시고 사랑합니다


by 창조의날개 [2015.06.08 13:53:57]

GROUP BY를 하는 이유가 FALSE가 안나오게 하려고 하는 것 입니다.

제 쿼리중 DECODE문에서 만족하지 못한 경우 NULL이 반환 됩니다.

그래서 MAX를 하면 NULL이 아닌 값만 보여지게 되는 거죠

생각하쟈님의 쿼리에서는 'false'로 했기 때문에 원하는 값이 안나올 수 있습니다.

이것을 NULL로 해주시고 GROUP를 살려주시면 될거 같네요..

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