A表10列
B表15列
在A表中选出一行或几行,复制到B表中。
并在额外的5列附加上相同的属性。A表
a11,a12,a13,a14,a15
a21,a22,a23,a24,a25
B表
a11,a12,a13,a14,a15,b1,b2,b3
a21,a22,a23,a24,a25,b1,b2,b31.select into 好像不行,mysql原因
2.insert into select也不行,因为列数不一样
3.insert into values(select A,b1,b2,b3)也不行.

解决方案 »

  1.   

    你可以先把B表的数据备份出来,然后drop掉B表,再SELECT INTO就可以。
      

  2.   

    多谢,不过这样不行。
    实际上,a表是应用信息。b表是一个a表的操作记录,保存对a表的改动。所以要在a表各列信息的基础上,附加上时间和改动人等信息。
      

  3.   

    >A表10列
    >B表15列
    >在A表中选出一行或几行,复制到B表中。
    >并在额外的5列附加上相同的属性。>A表
    >a11,a12,a13,a14,a15
    >a21,a22,a23,a24,a25
    >B表
    >a11,a12,a13,a14,a15,b1,b2,b3
    >a21,a22,a23,a24,a25,b1,b2,b3>1.select into 好像不行,mysql原因
    >2.insert into select也不行,因为列数不一样方案1;   insert into B表 select a11,a12,a13,a14,a15,' ' from A表 where 条件追加;
    这个做不行,为啥不行,请明确说来!>3.insert into values(select A,b1,b2,b3)也不行.>多谢,不过这样不行。
    >实际上,a表是应用信息。b表是一个a表的操作记录,保存对a表的改动。所以要在a表各列信息>的基础上,附加上时间和改动人等信息。这样说不能明白,请详细说明业务需求!  如果从sql 文的规约,方案1;是可以执行的.
    >2.insert into select也不行,因为列数不一样
    这个原因,不能接受!
    B表的列是不是有制约啊?请确认!
      

  4.   

    多谢回复,
    因为B表在包含A表所有内容的基础上,还附加了另外几列。
    所以用insert into select 后会有
    Column count doesn't match value count at row 1
    且即使成功后还需要在填充后几列信息。对于逻辑我在补充一下,
    比如说:
    A表是Billboard前50名的信息。包括歌曲名,歌手,等等。
    B表是A表的维护记录。除了包括A表的内容外,还要附加上序号,修改者姓名,修改时间,进行的操作(添加,删除,修改)。
    b表的制约:有一个列是自增长的序号,有一个enum,有一个timestamp(自动当前时间),有一个varchar
      

  5.   

    补充一点,trigger我也考虑了,不过无法得到修改人姓名。
      

  6.   

    是否每次操作附加内容都是相同的?如果是:
    insert into 
    select a.column1,a.column2,...b1column1,b1column2,b1column3
    from a为什么不行?
      

  7.   

    >如果是:
    >insert into 
    >select a.column1,a.column2,...b1column1,b1column2,b1column3
    >from a
    你这样简单描述,我还是不明白,对不起。
    简单看看你上面sql文是不是,不正确啊?
    如果方便的话。请把,表的构造粘上来。
    然后,请再详细描述你需要的数据!这样,我能会为你出一份力量。〉对于逻辑我在补充一下,
    〉比如说:
    〉A表是Billboard前50名的信息。包括歌曲名,歌手,等等。
    〉B表是A表的维护记录。除了包括A表的内容外,还要附加上序号,修改者姓名,修改时间,进
    〉行的操作(添加,删除,修改)。
    〉b表的制约:有一个列是自增长的序号,有一个enum,有一个timestamp(自动当前时间),有
    〉一个varchar从你这段描述,你应该用更新来实行你的需求比较好噢。
      

  8.   

    举例:
    A表:
    排名1,专辑1,歌手名1,发行时间1。
    5      黄金甲,周润发,2005-5-5
    B表:
    排名1,专辑1,歌手名1,发行时间1,序号1,操作人1,操作时间1,操作内容1。
    5   , 黄金甲,周润发,2005-5-5,  35,  甲,     2007-7-7,  添加
    B表的序号和操作时间是自动生成的。
    如果一个操作人一次进行了多个记录的更新,那么b表的操作人和操作内容是相同的。
    另外,通过JDBC返回自动增加的序列号,可以实现我的要求,但是比较麻烦。
    insert into B表(排名1,专辑1,歌手名1,发行时间1) select * from A表 where 专辑名='黄金甲',statement.return_generated_keys.
    key=rs.getInt(0){
      stmt.executeUpdate(update B表 set 操作人和操作内容)
    }
      

  9.   

    对不起!
    我的能力有限,不能为你出一份力!
    但是,我想说的。应用程序的开发,不要太依靠,SQL文。这是,我个人的意见!〉B表的序号和操作时间是自动生成的。
    B表的序号是通过sequence文生成的吗?
    操作时间是通过default生成的吗?
    我想应该不是吧!行!我想你已经找到答案了。我是在跟你学习!谢谢!