小弟有一大问题。关于insert的问题! (20分)

  • 主题发起人 主题发起人 winsock
  • 开始时间 开始时间
W

winsock

Unregistered / Unconfirmed
GUEST, unregistred user!
三个表。。。A为主表。。。B为从表。。A表与B表是一对多的关系!
C表的字段和B表的基本一样!

怎么把A表编号的某条记录中所对应的B表明细记录。存入C表中呢?

举例:
A表 B表
产品编号 产品编号 产品大小 单位价格
001 001 25 2.6
002 001 35 4.2
002 25 1.8
C表
产品编号 产品大小 单位价格

我的意思是想当用户选择OO1编号记录的时候,把对应的B表中两条001记录存入C表中,反之如果选择002编号的记录时,就把对应B表所对应的002的此条记录存入C表中。这样的语句应该怎么写?
为什么我这样写。却反而把B的记录全部存入C表中呢?
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('insert into C表(ID) select id from B表 where id=:aaa ');
Parameters.ParamByName('aaa').value:='A表.id'
prepared;
execsql;
 
究竟是B插入A还是A插入B呀?你的SQL写的是从B插入到A中,你怎么还问
“可问题是为什么在B表中没插入A表的记录呢?”?
 
你可能问题没说清楚吧
 
你的语句是写反了吧,老兄!

Insert into B表(rjmc) select rjmc from A表

 
用GROUP BY ORDERING
 
A表就一个rumc字段吗?,你是要往A表里insert还是往B表里insert ?
程序没有给你提错吗?
如果A表里还有其它字段,设置为不能为空的话,这样就插不进去了!但它会给你提示你,
你用sql explorer试一下!
 
肯定是表达有误拉
但我看sql语句没错呀
 
我的表达有误。。。我把我的想法都说出来了呀!
 
select * from b where where id = a.id
into c
 
不行的呀。小弟很着急呀,就当帮我的忙吧!
 
With AdoQuery1 Do
Begin
Close;
Sql.Clear;
Sql.Add('Insert into C表 Select * From B表 Where B表.Id=:AAA');
Parameters.ParamByName('AAA').value:=A表.Id //是A表的ID值
 ExecSQL;
End;
 
   
你的语句是这样的:
sql.Add('insert into C表(ID) select id from B表 where id=:aaa ');
Parameters.ParamByName('aaa').value:='A表.id'

生成的语句是:
INSERT INTO C (ID)
SELECT ID
FROM B
WHERE ID=A.ID

问题出在条件 ID=A.ID 上,这样写,对每条记录都满足条件,所以就全插入了。

应该先指定一个A表的ID值,存到变量X中,然后
INSERT INTO C (ID)
SELECT ID
FROM B
WHERE ID = :TheID

然后给参数TheID赋值为X即可
  
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部