2015-04-07 66 views
1

我有这样一个表:SQL查询从表中的一行提取一些行

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' 
+1

那么最好的办法是规范表,并创建关联的表举行类别即一对多关系。 –

+0

@AhhikChakraborty是的,当然。但这不是我的数据库,我只需要检索数据。我无法改变人际关系。 – eatmypants

+0

你的创建表在'id整数auto_increment主键'后缺少','。我知道这只是一个小的手动错误:)也是'插入'查询语法错误。 –

回答

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 

SQLFiddle

+0

这就是诀窍。谢谢。我有相同的查询,但不幸的是没有看到正确的结果。现在它是完美的。 – eatmypants

+0

@eatmypants:不客气 – potashin

0

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 

请让我知道,如果它解决您的问题

相关问题