我想将mysql行转换为列,我试过但没有获得所需的输出。先感谢您。 我的表格查询是
第一张桌子
CREATE TABLE `variant_to_group` (
`variant_to_group_ID` int(11) NOT NULL AUTO_INCREMENT,
`variant_group_ID` int(11) NOT NULL,
`variant_ID` int(11) NOT NULL,
PRIMARY KEY (`variant_to_group_ID`)
)
INSERT INTO `products_to_variants` (`products_to_variants_ID`, `variant_ID`, `variant_value`, `variant_group_ID`) VALUES
(1, 1, 'STD', 1),
(2, 1, '25', 1),
(3, 1, '50', 1),
(4, 1, '75', 1),
(5, 1, '100', 1),
(6, 2, 'USHA', 1),
(7, 2, 'SAM', 1),
(8, 2, 'Getzo', 1);
第二张桌子
CREATE TABLE `products_new` (
`product_ID` int(11) NOT NULL AUTO_INCREMENT,
`product_name` varchar(100) NOT NULL,
`brand_ID` int(11) NOT NULL,
`categories_ID` int(11) NOT NULL,
`product_variant_group_ID` int(11) NOT NULL,
PRIMARY KEY (`product_ID`)
)
INSERT INTO `products_new` (`product_ID`, `product_name`, `brand_ID`, `categories_ID`, `product_variant_group_ID`) VALUES
(1, 'Hero Honda CD 100', 1, 1, 1);
,所需的输出是-
product_name categories_ID variant_value_1 variant_value_2 Hero Honda CD 100 1 STD USHA Hero Honda CD 100 1 25 USHA Hero Honda CD 100 1 50 USHA Hero Honda CD 100 1 75 USHA Hero Honda CD 100 1 100 USHA Hero Honda CD 100 1 STD SAM Hero Honda CD 100 1 25 SAM Hero Honda CD 100 1 50 SAM Hero Honda CD 100 1 75 SAM Hero Honda CD 100 1 100 SAM Hero Honda CD 100 1 STD Getzo Hero Honda CD 100 1 25 Getzo Hero Honda CD 100 1 50 Getzo Hero Honda CD 100 1 75 Getzo Hero Honda CD 100 1 100 Getzo
我尝试了来自google和stackoverflow的一些搜索结果,但我未能生成以上输出
答案 0 :(得分:0)
您需要执行联接才能获得所需的输出
SELECT * FROM `products_new`
INNER JOIN `variant_to_group`
ON `products_new`.`variant_group_ID` = `products_new`.`product_variant_group_ID`;
答案 1 :(得分:0)
请尝试以下查询。它应该产生与您期望的一样的精确输出。
SELECT product_name,categories_ID,v1.variant_value AS "variant_value_1",
v2.variant_value AS "variant_value_2"
FROM products_new
LEFT JOIN
(SELECT * FROM products_to_variants WHERE variant_ID=1) v1
ON products_new.product_id = products_new.product_variant_group_ID
LEFT JOIN
(SELECT * FROM products_to_variants WHERE variant_ID=2) v2
ON products_new.product_id = products_new.product_variant_group_ID
ORDER BY v2.variant_value;
对上面的查询有一点解释,我将您的products_new
表用作LEFT JOIN
的引用。如果您查看我提供的查询,则表明我正在加入:
products_new.product_id = products_new.product_variant_group_ID
就知道此联接是否有效,取决于您,但我认为这是有效的。然后,我为两个子查询分配了v1
和v2
别名。我对这些子查询中的每一个定义的variant_ID
值都不同。至于我为什么使用LEFT JOIN
的原因,是因为您的预期输出需要variant_value
列并排以variant_ID
值区分。
但是,此查询将仅满足您给定的示例数据和预期的输出。因此,如果您希望通过此查询满足其他条件,请使用其他信息更新您的问题。