我有一张表:
CREATE TABLE company (
id integer auto_increment primary key
company_name varchar(50),
category_1 varchar(50) NOT NULL,
category_2 varchar(50) NOT NULL,
category_3 varchar(50) NOT NULL)
INSERT INTO company VALUES ('apple', 'mobile', 'pc', 'gadget');
如何进行返回的查询:
1, 'apple', 'mobile'
2, 'apple', 'pc'
3, 'apple', 'gadget'
答案 0 :(得分:2)
您可以使用UNION
:
SELECT id, company_name, category_1 FROM company
UNION
SELECT id + 1, company_name, category_2 FROM company
UNION
SELECT id + 2, company_name, category_3 FROM company
答案 1 :(得分:0)
notulysses提供的解决方案很好,可以解决您的问题。但是如果你添加更多行,你的查询可能会变得更笨重,因此编写了不同的解决方案。
假设以下设置
创建表格
CREATE TABLE company (
id INTEGER AUTO_INCREMENT PRIMARY KEY,
company_name VARCHAR(50),
category_1 VARCHAR(50) NOT NULL,
category_2 VARCHAR(50) NOT NULL,
category_3 VARCHAR(50) NOT NULL
);
数据插入
INSERT INTO company(company_name ,category_1 ,category_2 ,category_3 ) VALUES ('apple', 'mobile', 'pc', 'gadget');
INSERT INTO company(company_name ,category_1 ,category_2 ,category_3 ) VALUES ('Samsung', 'mobile', 'pc', 'gadget');
INSERT INTO company(company_name ,category_1 ,category_2 ,category_3 ) VALUES ('microsoft', 'mobile', 'pc', 'gadget');
动态生成ID的SQL解决方案
SELECT @row_number:=@row_number+1 AS id, company_name,products FROM (
SELECT company_name ,(SELECT Category_1 FROM company c2 WHERE c2.company_name =c1.company_name ) products FROM company c1
UNION
SELECT company_name ,(SELECT Category_2 FROM company c2 WHERE c2.company_name =c1.company_name ) products FROM company c1
UNION
SELECT company_name ,(SELECT Category_3 FROM company c2 WHERE c2.company_name =c1.company_name ) products FROM company c1
) T ,(SELECT @row_number:=0) rowNum
ORDER BY company_name
如果您运行此查询,则会获得低于输出
id company_name products
------ ------------ --------
1 apple mobile
2 apple pc
3 apple gadget
4 microsoft pc
5 microsoft gadget
6 microsoft mobile
7 Samsung mobile
8 Samsung pc
9 Samsung gadget
如果它解决了您的问题,请告诉我