SQL Server:Insert语句在1个值保持不变直到插入所有值时插入多个值
我想做以下工作:SQL Server:Insert语句在1个值保持不变直到插入所有值时插入多个值,sql,sql-server,Sql,Sql Server,我想做以下工作: manufacturerretailerid categoryid 10 1 10 2 10 3 10 4 10 5 20 1 20 2
manufacturerretailerid categoryid
10 1
10 2
10 3
10 4
10 5
20 1
20 2
20 3
20 4
20 5
我有一个表,其中包含以下列:
id, manufacturerretailerid, categoryid, order
订单
可以为空
在ManufacturerRetailId
和类别ID
中,我需要执行以下操作
- 如果manufacturerretailer表中存在manufacturerretailer,请插入CategoryId: 一, 2. 3. 4. 五,
select *
from ManufacturerRetailers mr
join manufacturers m on m.id = mr.ManufacturerId
where m.id = 14
对于我得到的每个ID,我需要插入所有CategoryID
我从以下几点开始:
insert into ManufacturerRetailerCategories (ManufacturerRetailerId, CategoryId)
select mr.id
from ManufacturerRetailers mr
join manufacturers m on m.id = mr.ManufacturerId
where m.id = 14
但我不确定如何为每个制造商插入详细信息,我在categoryid字段中返回1,2,3,4,5
假设我们得到以下结果:
manufacturerretailerid categoryid
10 1
10 2
10 3
10 4
10 5
20 1
20 2
20 3
20 4
20 5
制造业零售业-10,20,30,40,50
我希望:
manufacturerretailerid categoryid
10 1
10 2
10 3
10 4
10 5
20 1
20 2
20 3
20 4
20 5
等等
实际的categoryid列表大约有30长,所以我想知道是否可以在一个insert语句中完成这项工作
谢谢你的帮助
谢谢
编辑:
我认为这将增加一个价值:
insert into ManufacturerRetailerCategories (ManufacturerRetailerId, CategoryId)
values((select mr.id from ManufacturerRetailers mr
join manufacturers m on m.id = mr.ManufacturerId
where m.id = 14) ,(1))
但我想知道如何添加许多
类别ID实际上是一个ID列表-目前没有关系,因此我无法从表中提取它们。我认为您可以通过
交叉连接来做您想做的事情。您的问题不清楚类别值的实际位置。这可能是您想要的:
insert into ManufacturerRetailerCategories (ManufacturerRetailerId, CategoryId)
select mr.id, c.categoryId
from ManufacturerRetailers mr join
manufacturers m
on m.id = mr.ManufacturerId cross join
(select distinct categoryId from manufacturerRetailers) c
where m.id = 14 ;
如果您有一个明确的类别表
,那么您应该使用它而不是子查询。您真正使用的是什么数据库,SQL Server还是MySQL?适当地标记您的问题。为什么同时使用MySQL和SQL Server标记?不要给未涉及的产品贴标签!您可以编写一个存储过程,在两个表中运行,只需获取id并将每一对插入到列中,但老实说,这看起来很奇怪,因为为什么需要一个表中的每个字段和另一个表中的每个字段之间的关系,这种关系实际上并不意味着什么,因为ManufacturerRetailer表没有类别。这是一个单独的表,但目前与manufactureretailers没有关系,因此我有一个ID列表,即1,2,3,4,5,我需要将其添加到存在的每个Manufacturerretailer中。@anna。然后将该表用于子查询。thank you@Gordon由于外键约束,我需要创建一个临时表,然后可以使用上面的方法。thank you我认为如果没有外键约束,这会起作用,我在问题中没有解释。
Here you go, hope it helps
insert into ManufacturerRetailerCategories (ManufacturerRetailerId, CategoryId)
select mr.id, cat.id
from ManufacturerRetailers mr join
manufacturers m
on m.id = mr.ManufacturerId cross join
(SELECT * FROM ( VALUES(1),(2),(3),(4), (5) ) AS T1(id)) cat
where m.id = 14 ;