2015-04-07 43 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 

請讓我知道,如果它解決您的問題