主: 现在有很多的表,一个主表,有很多的分表,主表中有4-5个字段都只是数字代替的,并不是实际的值,实际的值在那些分表中有
Table1(sid sname ssex sage saddress smobile sschool)
Table2(sid saddress)
Table3(sid smobile)
Table4(sid sschool)
就像这样的,现在要想查询,是很简单的,现在我想插入进去到主表中,应该怎么去插入?要使用几个DataSet或者要几个Query才能做到插入新的数据后能查询到?要怎么插入?
数据:
Table1
1 Klaymen 男 19 1 1 1
2 Mary 女 21 2 2 2
3 Billy 男 24 3 3 3
Table2
1 中国
2 美国
3 日本
Table3 
1 130********
2 152********
3 184********
Table4
1 中国大学
2 美国武术学校
3 东京大学现在要查询好办,但是插入要怎么做才能查询的到新插入的?
还有,怎么插入新的数据到主表中?还能正确的查询到。
 

解决方案 »

  1.   

    用存储过程插入~SQL SERVER?
      

  2.   

    存储过程怎么插入?里面有几个字段都是关联的,我要插入该怎么插?
    难道我就
    Insert into Table1(sname,ssex,sage,saddress,smoblie,sschool) values 
                      ('张三','男',21,4,4,4,4)
    就这样插入主表吗?
      

  3.   

    你的意思是说,如果那些关联的字段里有相应的值的话,我后面关联的就写4是可以的?
    如果那些4再别的表中没有要添加的话,是不是要再添加一个TADOQuery去添加别的关联表中的4是什么再Insert into Table1(...) values ('张三','男',21,4,4,4,4)就可以了?
      

  4.   

    你可以这么理解,数据库中的表按这种情况,可以粗略的分为数据表和代码表,Table1可以看成数据表,其他的是代码表。
    代码表是事先准备好的,包含所有的信息,插入数据表之前,根据相因代码表得出每个字段的代码。
      

  5.   

    1.那我如果在插入数据表的时候,我可以直接吧关联的字段添加进去吗?
    Insert into Table1(...) values ('张三','男',21,'中国',13787628768,'加理敦学校')
    这样写可以吗?我后面关联的字段不写关联的代码,直接写具体的值是可以的?前提是代码表中有相应的字段和我现在插入的对应就可以了?2.还有,在SQL查询分析器中关联表查询是要Inner join...on的,但是在Delphi代码里那个TADOQuery.SQL.ADD()里面SQL语句可以不用写Inner join...on也能查询出来?我原来见过一个SQL语句,那个数据表想查询出来,关联了很多表:
    whith ADOQuery do 
       SQL.Add('select t.sname,t.sex,t.address,t.age,t1.ssource,t1.srecord from t,t1 where t.scode = t1.sid and t2.sname = t.sname');
       ExecSQL;
    好像是这样写的SQL语句,这样的语句明显是关联表查询,它没有使用Inner join ...on但是能查询出来,使用了很多TADOQuery,有的是Insert不同的表的,在Delphi中关联表查询的SQL语句可以不用写的像SQL分析器中那样有Inner join的吗?
      

  6.   

    1.那我如果在插入数据表的时候,我可以直接吧关联的字段添加进去吗? 
    Insert into Table1(...) values ('张三','男',21,'中国',13787628768,'加理敦学校') 
    这样写可以吗?我后面关联的字段不写关联的代码,直接写具体的值是可以的?前提是代码表中有相应的字段和我现在插入的对应就可以了? 
    答:这样不可以,代码表中的数据是你事先准备好的。比如国家代码表中所有的国家都是你事先添加进去的。2.还有,在SQL查询分析器中关联表查询是要Inner join...on的,但是在Delphi代码里那个TADOQuery.SQL.ADD()里面SQL语句可以不用写Inner join...on也能查询出来?我原来见过一个SQL语句,那个数据表想查询出来,关联了很多表: 
    whith ADOQuery do 
      SQL.Add('select t.sname,t.sex,t.address,t.age,t1.ssource,t1.srecord from t,t1 where t.scode = t1.sid and t2.sname = t.sname'); 
      ExecSQL; 
    好像是这样写的SQL语句,这样的语句明显是关联表查询,它没有使用Inner join ...on但是能查询出来,使用了很多TADOQuery,有的是Insert不同的表的,在Delphi中关联表查询的SQL语句可以不用写的像SQL分析器中那样有Inner join的吗?
    答:select t.sname,t.sex,t.address,t.age,t1.ssource,t1.srecord from t,t1 where t.scode = t1.sid and t2.sname = t.sname 这样的写法也是一种连接,inner join 只是连接中的一种而已,写法有很多种,但达到的目的都是一样的。TADOQuery
    倒是不用很多个,因为一个TADOQuery对应的是一个数据库实例,这个实例包含了这个实例下的所有表(前提是你所用的用户拥有这个实例全部表的权限)。
      

  7.   

    请问这样的SQL语句在SQL分析器中,执行是不会出错的?是因为在每个字段前面都有表的所写,所以SQL分析器就知道是什么表?
    select t.sname,t.sex,t.address,t.age,t1.ssource,t1.srecord from t,t1 where t.scode = t1.sid and t2.sname = t.sname
    还有插入数据表的时候,实际上插入不能插入实际的值,只能插入代码表的代码,具体的值是在代码表中的。
    with TADOQuery do
       SQL.Add('select * from Table2 where saddress=' + Edit1.Text);
       ExecSQL;
    end;
    if TADOQuery.RecourdCount <> 0 
       MessageBox.Show('Edit1.Text输入的值在代码表中存在');
       with TADOQuery do 
       SQL.Add('insert into Table1(...) values ('张三','男',23,TADOQuery.FiledByName('sid').asstring,...))');
       ExecSQL;
    else
       MessageBox.Show('Edit1.Text输入的值在代码表中不存在');
    就像这样的,正真插入进去的,不是实际的地址,是那个代码表中实际地址对应的sid,我就在那里写了
    TADOQuery.FiledByName('sid').asstring就能插入,楼上说的是不是这个意思?
      

  8.   

    请问这样的SQL语句在SQL分析器中,执行是不会出错的?是因为在每个字段前面都有表的所写,所以SQL分析器就知道是什么表? 
    答:对,你可以这么理解!
    楼上说的是不是这个意思?
    答:是的!就是这个意思!呵呵~