我不太喜欢数据库,我在使用mysql数据库时遇到了以下问题。
我有一张这样的table:
CREATE TABLE CommodityName (
id BigInt(20) NOT NULL AUTO_INCREMENT,
commodity_details_id BigInt(20) NOT NULL,
language_id BigInt(20) NOT NULL,
commodity_name VarChar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
description Text CHARACTER SET latin1 COLLATE latin1_swedish_ci,
PRIMARY KEY (
id
)
) ENGINE=InnoDB AUTO_INCREMENT=87 ROW_FORMAT=DYNAMIC DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
ALTER TABLE CommodityName COMMENT = '';
此表中的记录用不同的语言表示商品信息。
商品是由商品指定的,由商品详细信息id(即另一个表的fk)指定。
一个特定的商品可以有多个记录到这个commodityname表中(我有一个特定语言的每个翻译的记录,由language\u id字段表示)。例如,我有两个记录:
id commodity_details_id language_id commodity_name description
-------------------------------------------------------------------------------------------------------
1 1 1 Rice Asia Rice Asia
16 1 3 Umuceli Asia Umuceli Asia
表示相同的商品信息(两个都有商品详细信息\u id=1),但有两种语言(英语和基尼万达语)。理论上我也可以有其他语言,所以我可以有n个特定商品的记录。
我需要创建一个查询,其中对于指定的商品(其中商品详细信息id=1),它将检索到的记录的所有商品名称字段作为单个记录的列返回。
参考上一个例子:
commodity_details_id commodity_name_EN commodity_name_RWA commodity_name_FR
----------------------------------------------------------------------------------------------------------------
1 Rice Asia Umuceli Asia null
如何实现这样一个查询,即从多个记录将每个记录中的一部分信息转换为新查询中的一个新列?
2条答案
按热度按时间ds97pgxw1#
你要找的是所谓的动态轴心。
看看下面的代码,看看它是否适合你。在您的案例中,模式可能有点不同(只是列和表的名称)。我使用的是commodityname,commodity\u details,languages表。您只需在第2行的参数中传递商品详细信息id即可:
您还可以用它创建一个存储例程,以便从应用程序或其他地方调用它。
请评论,如果它不适合你。
7tofc5zh2#
试试这个: