2012-06-18 43 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