SQL查询从表的一行中提取一些行

时间:2015-04-07 11:48:29

标签: mysql 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'

2 个答案:

答案 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

SQLFiddle

答案 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 

如果它解决了您的问题,请告诉我

相关问题