二张表,sx(学号,姓名),sy(学号,年龄),学号是主键,sx有100条记录,sy有30条记录。问题一:
运行如下sql语句后,生成的视图stu中记录数不是100,而是超过100,可能是什么原因?
create view stu(学号,姓名,年龄) 
as 
select sx.学号,姓名,年龄 
from sx,sy 
where sx.学号=sy.学号(+);问题二:
在表sx_sy(学号,姓名,年龄)已经有sx的100条记录的情况下,我想把sy中的年龄记录插入sx_sy表,
用语句update sx_sy set 年龄=(select 年龄 from sy where sy.学号=sx_sy.学号)可以实现;
那么,是否可以用insert实现?类似下面的sql语句为什么不行(报错,标识符无效)?
insert into sx_sy(年龄)select 年龄 from sy where sx_sy.学号=sy.学号;谢谢!

解决方案 »

  1.   

    问题1:肯能是你的数据有重复的 在select 之后加上distinct 试试
    问题2:sql语句有问题
    应该这样:insert into sx_sy(年龄)select sy.年龄 from sy,sx_sy where sx_sy.学号=sy.学号;
      

  2.   

    二张表,sx(学号,姓名),sy(学号,年龄),学号是主键,sx有100条记录,sy有30条记录。问题一:
    运行如下sql语句后,生成的视图stu中记录数不是100,而是超过100,可能是什么原因?
    create view stu(学号,姓名,年龄)
    as
    select sx.学号,姓名,年龄
    from sx,sy
    where sx.学号=sy.学号(+);-------------------
    造成这个问题的原因是sy中存在重复记录
    问题二:
    在表sx_sy(学号,姓名,年龄)已经有sx的100条记录的情况下,我想把sy中的年龄记录插入sx_sy表,
    用语句update sx_sy set 年龄=(select 年龄 from sy where sy.学号=sx_sy.学号)可以实现;
    那么,是否可以用insert实现?类似下面的sql语句为什么不行(报错,标识符无效)?
    insert into sx_sy(年龄)select 年龄 from sy where sx_sy.学号=sy.学号;------------------
    语法不正确
    就算你连语法修改正确了,可以插入,也会造成重复记录
      

  3.   

    问题二:
    update语句是更新表中的已有记录
    insert语句是往表中新增记录