【问题标题】:SQL Server : Insert Multiple Duplicate Records into Child table from Parent tableSQL Server:将多个重复记录从父表插入子表
【发布时间】:2013-06-26 08:08:45
【问题描述】:

我需要根据 Products 表中每条记录的条件在 ProductImages table 中插入 3 次,从表 Products 中将多行插入表 ProductImages 以下是product table

Sno | Productid 
 1  |    ABC
 2  |    XYZ
 3  |    PQR

我希望 ProductImages 表为

Sno | ProductId | ImageId 
 1  |    ABC    | ABC_Small
 2  |    ABC    | ABC_Big
 3  |    ABC    | ABC_Biggest
 4  |    XYZ    | XYZ_Small
 5  |    XYZ    | XYZ_Big
 6  |    XYZ    | XYZ_Biggest

是否可以从与 Productid 关系的父表中获取上述多条记录?请帮我。谢谢

【问题讨论】:

  • 尝试整理您的问题,以便于阅读
  • 在旁注中,您可能需要重新考虑您的数据库模型,因为它似乎没有正确规范化,因为您将 ProductId 存储在多个位置,除非这是出于性能原因或设计这样的。
  • @Gayathri ProductImages 表是否包含一个自动递增的 ID,即 Sno?
  • Yes Sno 是自动增量列

标签: sql-server tsql


【解决方案1】:
declare @Product table(Sno int, Productid char(3))
declare @ProductImages Table(Sno int identity(1,1), ProductId char(3), ImageId varchar(20))

insert @Product
values(1, 'ABC'),(2, 'XYZ'),(3, 'PQR')

insert @ProductImages (ProductId, ImageId)
select p.ProductId,p.ProductId+ '_' +a.plus from @Product p
cross apply 
(values ('Small'), ('Big'), ('Biggest')) a(plus)

select * from @ProductImages

为 sql 2000 编辑

insert @Product values(1, 'ABC')
insert @Product values(2, 'XYZ')
insert @Product values(3, 'PQR')


insert @ProductImages (ProductId, ImageId)
select p.ProductId,p.ProductId+ '_' +a.plus from @Product p
join 
(select 'Small' plus
union all select 'Big'
union all select 'Biggest') a(plus)
on 1 = 1

结果:

Sno ProductId ImageId
1   ABC       ABC_Small
2   ABC       ABC_Big
3   ABC       ABC_Biggest
4   XYZ       XYZ_Small
5   XYZ       XYZ_Big
6   XYZ       XYZ_Biggest
7   PQR       PQR_Small
8   PQR       PQR_Big
9   PQR       PQR_Biggest

【讨论】:

  • 谢谢。有什么方法可以从产品表中动态插入它,而且我也得到了(关键字“值”附近的语法不正确)..
  • @Gayathri 您在 mssql 上运行的版本早于 2008 年。我将重写脚本,使其也适用于 2000 年
  • 是的,它在 2008 r2 上工作,请提供脚本以动态获取产品表中的值
  • @Gayathri 我不确定你的意思是什么:动态地从产品表中获取值
【解决方案2】:

试试这个

insert ProductImages (ProductId, ImageId)
select
    p.Productid,
    p.Productid+'_'+size
from Products p
cross join (
    Select size
    From (
       Values 
          ('Small'), 
          ('Big'),
          ('Biggest')
    ) s(size)
) sizes

【讨论】:

  • 和我的答案一样,只是没有表格和结果
  • @t-clausen.dk cross apply 看起来比 cross join
  • @Gayathri 固定自动增量字段
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多