MySQL - 在多个 JOIN 匹配项上添加列

MySQL - Add columns on multiple JOIN matches

我在查询方面遇到了一些困难,或者至少在找到一种使其熟练工作的方法方面遇到了困难。 总结一下这个问题,假设我有两个像 theese 这样的表:

TABLE 1:

id_product id_category
A1 1
A2 2
A3 3

TABLE 2:

id_category id_lang description
1 1 Category 1 IT description
1 2 Category 1 EN description
1 3 Category 1 DE description
2 1 Category 2 IT description
2 2 Category 2 EN description
2 3 Category 2 DE description

其中,如果我考虑 id_category 进行 JOIN,我当然有多个匹配项,适用于每种可用语言。 我想要的结果是这样的:

id_product id_category IT_desc EN_desc DE_desc
A1 1 Category 1 IT description Category 1 EN description Category 1 DE description
A2 2 Category 2 IT description Category 2 EN description Category 2 DE description

所以将所有匹配项放在多个列中,以便在单个条目中查看不同的语言描述。 我唯一能做的就是有多个连接,每次都使用不同的语言,比如:

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

这个方法确实有效,但我想知道是否有更好的替代方法,它不涉及每次乘法连接,当涉及到更多数据时,这可能会很慢。

谢谢大家!

您可以加​​入群组 table

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 | Category 1 IT description | Category 1 EN description | Category 1 DE description
A2         |           2 | Category 2 IT description | Category 2 EN description | Category 2 DE description

db<>fiddle here