Sql 带联接的高级查询
我正在尝试将包含产品所有细节的产品表转换为SQL中的单独表。除了重复的描述符细节外,我已经完成了所有工作 我的问题是所有的产品都有尺寸/颜色/款式/其他许多其他产品所包含的。我只想对所有项目使用一个大小或颜色描述符,并对所有产品重复使用“ID”,我认为这是产品ID的父键,这是…外键。唯一的问题是,每个描述符都会分配多个外键。所以我在考虑让它跳过为每个描述符计算一个外部父键,然后检查该描述符是否存在,以及它是否使用它的键作为描述符 数据表Sql 带联接的高级查询,sql,join,union,unique,Sql,Join,Union,Unique,我正在尝试将包含产品所有细节的产品表转换为SQL中的单独表。除了重复的描述符细节外,我已经完成了所有工作 我的问题是所有的产品都有尺寸/颜色/款式/其他许多其他产品所包含的。我只想对所有项目使用一个大小或颜色描述符,并对所有产品重复使用“ID”,我认为这是产品ID的父键,这是…外键。唯一的问题是,每个描述符都会分配多个外键。所以我在考虑让它跳过为每个描述符计算一个外部父键,然后检查该描述符是否存在,以及它是否使用它的键作为描述符 数据表 PI Colo Sz OTHER 1
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
它的目标表是
===================================
DI Description
1 | Blue
2 | Blac
3 | 5
4 | 6
6 | Vintage
7 | Simple
=============================
DI Description
1 | Blue
2 | Blac
3 | 5
4 | 6
6 | Vintage
7 | Simple
选择数据表
Unique.Data.Table.Colo
Unique.Data.Table.Sz
Unique.Data.Table.Other
=======================================
DI Description
1 | Blue
2 | Blac
3 | 5
4 | 6
6 | Vintage
7 | Simple
然后,在我们创建所有描述符之后,问题的两个部分是如何执行新的查询并将产品ID分配给描述符
皮迪
1 | 1
1 | 3
1 | 4
2 | 1
2 | 3
2 | 4
通过了解如何做到这一点,我应该能够为产品中的所有300+列复制此模式。其中一些字段的大小超过60个字符,因此将节省大量空间
我是否使用数组?我想您应该将描述表拆分为不同的类别,如-colorDescription、sizeDescription等 如果不可行,我建议增加一列显示类别属性:
DI Description Category
1 | Blue | Color
2 | Blac | Color
3 | 5 | Size
4 | 6 | Size
6 | Vintage | Other
7 | Simple | Other
然后将该表中的主键作为ID和Category列的组合
这将减少注入任何数据错误的机会。也很容易找到它。好的,如果我没有弄错的话,您希望将所有唯一属性从列转换为单个表(
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
然后,为了将数据表
链接到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)
因此,您试图将
Colo
字段的所有唯一值放入一个单独的Colo
表中,对于Sz
和Other
也一样。。。他们也有自己的桌子,对吗?主键是自动递增的吗?是的,这是正确的。但是它们都进入同一个表,称为属性或描述,主键将自动递增。是的,我确实忘记了这一点。我们将有一个额外的列(所有的属性都被更改为ID的我相信),我想就是这样,联合是他们的关键,谢谢!现在我可以开始300+列联合../颤抖