2012-06-18 74 views
0

我試圖轉換包含該產品的所有細節到SQL單獨的表中產品表。除了重複的描述符細節,我已經完成了一切。提前查詢與加入

我有所有的產品都有大小/顏色/風格/其他許多其他產品中含有的問題。我只想要所有項目都有一個尺寸或顏色描述符,並重復使用所有產品的「ID」,我認爲這是產品ID的父項關鍵字,即「外鍵」。唯一的問題是每個描述符都有多個外鍵分配給它。所以,我正在思考的是,讓它不必爲每個描述符找出一個Foreign Parent鍵,然後檢查該描述符是否存在,以及它是否使用描述符的Key。

數據表

PI Colo Sz OTHER 


1  | Blue | 5 | Vintage 

2  | Blue | 6 | Vintage 

3  | Blac | 5 | Simple 

4  | Blac | 6 | Simple 

===================================

其目標表是這個

===================================

DI Description 

1  | Blue 

2  | Blac 

3  | 5 

4  | 6 

6  | Vintage 

7  | Simple 

=============================

選擇Data.Table

Unique.Data.Table.Colo

Unique.Data.Table.Sz

Unique.Data.Table.Other

======= ================================

然後提問的雙重效應後,我們創建的所有描述符如何做一個新的查詢並將產品ID分配給描述符。

PI | DI

1 | 1

1 | 3

1 | 4

2 | 1

2 | 3

2 | 4

通過搞清楚如何做到這一點,我應該能夠複製產品中所有300列的這種模式。其中一些字段大小超過60個字符,因此它將節省大量空間。

難道我用一個陣列?

+0

所以你試圖讓'Colo'的所有唯一值字段放到一個單獨的'Colo'表中,對於'Sz'和'Other'也是一樣的......他們也有自己的表嗎?主鍵自動遞增正確? –

+0

是的,這是正確的。但是它們都會再次進入同一個表中,稱爲屬性或描述,主鍵將自動遞增。 – JKB

回答

0

好吧,如果我理解正確的話,你想從列轉換爲行單個表中的所有獨特的屬性(detailstable),有一個ID和一個描述字段:

假設模式:

datatable 
------------------ 
PI [PK] 
Colo 
Sz 
OTHER 

detailstable 
------------------ 
DI [PK] 
Description 

你可以先得到所有的獨特屬性的爲自己的表:

INSERT INTO detailstable (Description) 
SELECT 
    a.description 
FROM 
    (
     SELECT DISTINCT Colo AS description 
     FROM datatable 

     UNION 

     SELECT DISTINCT Sz AS description 
     FROM datatable 

     UNION 

     SELECT DISTINCT OTHER AS description 
     FROM datatable 
    ) a 

然後連接起來,datatable到在detailstable,我假設你有一個交叉引用表定義如下:

datadetails 
------------------ 
PI [PK] 
DI [PK] 

你可以再做:

INSERT INTO datadetails (PI, DI) 
SELECT 
    a.PI 
    b.DI 
FROM 
    datatable a 
INNER JOIN 
    detailstable b ON b.Description IN (a.Colo, a.Sz, a.OTHER) 
+0

我認爲就是這樣,聯盟是他們的關鍵,謝謝!現在我可以開始300+列聯合../顫抖 – JKB

0

我估計你想分解不同類別的描述表,如 - colorDescription,sizeDescription等。

如果這是不實際的話,我會建議有一個展示類別屬性一個額外的列:

DI Description Category 

1 | Blue  | Color 

2 | Blac  | Color 

3 | 5   | Size 

4 | 6   | Size 

6 | Vintage | Other 

7 | Simple  | Other 

然後在此表作爲ID和類別列的組合主鍵。

這將有較少的機會注入任何數據錯誤。跟蹤這件事情也很容易。

+0

是的,我沒有忘記這一點。我們會有一個額外的列(所有的屬性都被改爲ID,我相信) – JKB