notulysses给出的解决方案很好,可以解决您的问题。但是如果添加更多行,则查询可能会变得更大,从而导致编写不同的解决方案下面
假设设置
CREATE TABLE
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');
SQL解决方案以生成ID动态
SELECT @row_number:[email protected]_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
请让我知道,如果它解决您的问题
那么最好的办法是规范表,并创建关联的表举行类别即一对多关系。 –
@AhhikChakraborty是的,当然。但这不是我的数据库,我只需要检索数据。我无法改变人际关系。 – eatmypants
你的创建表在'id整数auto_increment主键'后缺少','。我知道这只是一个小的手动错误:)也是'插入'查询语法错误。 –