programing

MySQL - 여러 JOIN 일치 항목에 열 추가

starjava 2023. 8. 25. 23:09
반응형

MySQL - 여러 JOIN 일치 항목에 열 추가

저는 질문이나 적어도 그것이 능숙하게 작동할 수 있는 방법을 찾는 데 어려움을 겪고 있습니다.문제를 요약하면 다음과 같은 두 가지 테이블이 있다고 가정합니다.

표 1:

id_product id_interval
A1 1
A2 2
A3 3

표 2:

id_interval id_interval 묘사
1 1 카테고리 1 IT 설명
1 2 카테고리 1 EN 설명
1 3 카테고리 1 DE 설명
2 1 카테고리 2 IT 설명
2 2 카테고리 2 EN 설명
2 3 카테고리 2 DE 설명

JOIN에 대해 id_category를 고려하면 각 언어에 대해 여러 일치 항목이 있습니다.제가 원하는 결과는 다음과 같습니다.

id_product id_interval IT_desc EN_desc DE_desc
A1 1 카테고리 1 IT 설명 카테고리 1 EN 설명 카테고리 1 DE 설명
A2 2 카테고리 2 IT 설명 카테고리 2 EN 설명 카테고리 2 DE 설명

따라서 하나의 항목에서 서로 다른 언어 설명을 보기 위해 일치하는 모든 항목을 여러 열에 표시합니다.제가 할 수 있었던 유일한 일은 매번 다른 언어에 대해 여러 개의 조인을 하는 것이었습니다. 그래서 다음과 같은 것들이 있었습니다.

SELECT *
FROM table1 AS t1
LEFT JOIN table2 AS t2_IT
ON t2_IT.id_lang = 1 AND t1.id_category = t2_IT.id_category
LEFT JOIN table2 AS t2_EN
ON t2_EN.id_lang = 2 AND t1.id_category = t2_EN.id_category
LEFT JOIN table2 AS t2_DE
ON t2_DE.id_lang = 3 AND t1.id_category = t2_DE.id_category

이 방법은 실제로 효과가 있지만, 더 많은 양의 데이터에 대해 느릴 수 있는, 매번 결합을 곱하는 것을 포함하지 않는 더 나은 대안이 있는지 궁금합니다.

여러분 감사합니다.

조인된 테이블에서 그룹화할 수 있습니다.

SELECT t1.`id_product`, t1.`id_category`,
MAX(IF( `id_lang` = 1 ,  `description`, NULL)) IT_desc,
MAX(IF( `id_lang` = 2 ,  `description`, NULL)) EN_desc,
MAX(IF( `id_lang` = 3 ,  `description`, NULL)) DE_desc
FROM table1 t1 INNER JOIN table2 t2 ON t1. `id_category` = t2.`id_category`
GROUP BY t1.`id_product`, t1.`id_category`
id_product | id_category | IT_desc | EN_desc | DE_desc:--------- | ----------: | :------------------------ | :------------------------ | :------------------------A1 | 1 | 카테고리 1 IT 설명 | 카테고리 1 EN 설명 | 카테고리 1 DE 설명A2 | 2 | 카테고리 2 IT 설명 | 카테고리 2 EN 설명 | 카테고리 2 DE 설명

db<>여기로 이동

언급URL : https://stackoverflow.com/questions/70130599/mysql-add-columns-on-multiple-join-matches

반응형