使用SQL将数据传输到另一个表

时间:2011-01-23 11:53:47

标签: sql mysql

如果正在将我的prodiuct类别从主表中移出到单独的表中。目前它的存储方式如下:

ProductId       Product Name        Cat1    Cat2    Cat3
----------------------------------------------------------------------
1           Something One              Y        N       N
2           Another                    N        Y       N
3           Product Three              Y        N       Y
4           Final One                  N        N       Y

我的新表格如下:

CatID   CatName
---------------------------
1       Cat1
2       Cat2
3       Cat3

ID  CatID   ProductID
-----------------------------------
1   1       1
2   2       2
3   1       1
4   1       3
5   3       4

我的问题是;是否可以使用SQL将此信息从主表传输到新表?我有超过500种产品,并不想手工制作。

5 个答案:

答案 0 :(得分:2)

当然..假设新表在ID上有自动编号

insert into CatProduct(CatID, ProductID)
select 1, ProductID
from Product
where Cat1 = 'Y'
union all
select 2, ProductID
from Product
where Cat2 = 'Y'
union all
select 3, ProductID
from Product
where Cat3 = 'Y'

答案 1 :(得分:1)

当然,假设您的表是类别,产品和类别产品(ID定义为标识):

INSERT CategoryXProduct ( CatID, ProductID ) 
    SELECT 1, ProductId FROM Product WHERE Cat1 = 'Y'
INSERT CategoryXProduct ( CatID, ProductID ) 
    SELECT 2, ProductId FROM Product WHERE Cat2 = 'Y'
INSERT CategoryXProduct ( CatID, ProductID ) 
    SELECT 3, ProductId FROM Product WHERE Cat3 = 'Y'

答案 2 :(得分:0)

虽然您可以直接使用MySQL查询进行此类转换,但为什么不使用外部脚本语言来处理呢? PHP,Python等都有M​​ySQL库。

答案 3 :(得分:0)

是的,有可能。像SELECT中的INSERT一样......

INSERT into table1(id, name, fname)
SELECT id, lname, fname
FROM authors
WHERE somecondiction

答案 4 :(得分:0)

您的产品类别关系是多对一的(正如我从给出的示例行中看到的那样)?然后,您还可以考虑将产品的类别ID添加为products表中的列,而不是创建连接表以避免在查询中与此表连接。