日期:2014-05-17  浏览次数:20388 次

请教个关于多表关联查询并插入的问题
商品表格式是SPDM,SPMC,LB(表名shangpin)
商品规格1表格式是SPDM,GG1DM,GG1MC(表名GG1)
商品规格2表格式是SPDM,GG2DM,GG2MC(表名GG2)

A单据格式DJBH,CKDM(表名A)
B单据格式DJBH,SPDM,GG1DM,GG2DM,SL1,SL2(表名B)

想将shangpin表里的LB字段等于001的SPDM,SPMC以及所对应的GG1表里的GG1DM和GG2表里的GG2DM全插入到B表里,条件是A表的CKDM所对应DJBH在B表里没有的SPDM

插入格式是 DJBH,SPDM,GG1DM,GG2DM,SL1,SL2  (DJBH和SL1,SL2都是固定值)
(一个shangpin表里的SPDM对应多个GG1表里的GG1DM和GG2表里的GG2DM)

------解决方案--------------------
说的不够清楚,或许应该更严格

insert b ( DJBH,SPDM,GG1DM,GG2DM,SL1,SL2  )
select 
 a.DJBH,s.SPDM,g.GG1DM,c.GG2DM
,SL1  = 1
,SL2  = 1
from a
cross join shangpin s
inner join GG1 g on s.SPDM = g.SPDM
inner join GG2 c on s.SPDM = c.SPDM
where a.lb = '001'
and not exists (
select 1 from b
where a.DJBH = b.DJBH
and b.SPDM = s.SPDM
and b.GG1DM = g.GG1DM
and b.GG2DM = c.GG2DM
)


确定是否正确的方法是,先查询这个语句的select 部分,查看数据是否是你要的,是才执行整个语句