数据库中一个表里存有数据: 
table_QuestionAndAnswer(4列):id(主键)、question、answer、isStored(表示是否被存入到另外三个表中,已存入是1,没有存入是0) 
另外三个表: 
table_Question(2列):id(主键,触发器生成)、question 
table_Answer(2列):id(主键,触发器生成)、answer 
table_Relation(3列):id(主键,触发器生成)、question_id(外键,对应table_question的id)、answer_id(外键,对应table_answer的id) 我现在要做的是:把第一个表(table_QuestionAndAnswer)中isStored=0的数据存进后面三个表(table_Question、table_Answer、table_Relation)中,并将isStored改为1。 请教大家sql语句怎么写? 
万分感谢!

解决方案 »

  1.   

    SQL> INSERT ALL
      2  WHEN (OBJECT_TYPE = 'TABLE') THEN
      3  INTO TABLE_ALL VALUES (OBJECT_NAME)
      4  WHEN (OBJECT_TYPE = 'INDEX') THEN
      5  INTO INDEX_ALL VALUES (OBJECT_NAME)
      6  ELSE
      7  INTO OBJECT_OTHER 
      8  SELECT OBJECT_NAME, OBJECT_TYPE FROM USER_OBJECTS 
      9  ;参考这个
      

  2.   

    insert table_Question(question)
      select question from table_QuestionAndAnswer where sStored = 0;insert table_Answer(answer)
      select answer from table_QuestionAndAnswer where sStored = 0;insert table_Relation(question_id,answer_id)
      select table_Question.id,table_Answer.id 
        from table_QuestionAndAnswer,table_Question,table_Answer 
       where sStored = 0
         and table_QuestionAndAnswer.question = table_Question.question
         and table_QuestionAndAnswer.answer = table_answer.answer;update table_QuestionAndAnswer 
        set sStored = 1
      where sStored = 0;commit;
    注:最准确的是在table_Question和table_Answer表中加一列QuestionAndAnswer_id对应table_QuestionAndAnswer的id
      

  3.   


    insert table_Relation(question_id,answer_id) 
      select table_Question.id,table_Answer.id 
        from table_QuestionAndAnswer,table_Question,table_Answer 
      where sStored = 0 
        and table_QuestionAndAnswer.question = table_Question.question 
        and table_QuestionAndAnswer.answer = table_answer.answer;
    你这样有一个问题,question和answer不唯一,id才是唯一的。
    有没有更好的方法呢?
      

  4.   

    table_Question 和table_Answer的主键不用自动生成了,就用表table_QuestionAndAnswer的主键就可以吧
      

  5.   

    没办法 这两个表是后来建的,里面已经有别的数据了,没办法用表table_QuestionAndAnswer的id。
    哎!真不知道怎么办好!在线等待csdn前辈解答!
      

  6.   

    如果表结构还可以修改的话,建议在这两个表中增加一个id列,把第一个表的id更新过来,否则这3个表很难完全准确的建立起联系
      

  7.   

    1,建议在这两个表table_Question,table_Answer中增加一个qaid列,把第一个表的id更新过来。
    2,根据qaid列插入table_Relation。
    3,删掉table_Question,table_Answer中增加的qaid列
      

  8.   

    如果表结构不能改的话
    1,建两个临时表,(qaid是第一个表的id),在触发器里同时查入记录到临时表
    tmp_table_Question(id(主键,触发器生成)、question,qaid)
    tmp_table_Answer(id(主键,触发器生成)、answer,qaid)2,根据临时表插入table_Relation
      

  9.   

    在表 table_QuestionAndAnswer 上创建一个
    UPDATE 触发器
    在触发器内部用INSERT ALL 
     WHEN (OBJECT_TYPE = 'TABLE') THEN 
     INTO TABLE_ALL VALUES (OBJECT_NAME) 
      WHEN (OBJECT_TYPE = 'INDEX') THEN 
      INTO INDEX_ALL VALUES (OBJECT_NAME) 
      ELSE 
      INTO OBJECT_OTHER 
      SELECT OBJECT_NAME, OBJECT_TYPE FROM USER_OBJECTS 
    同时插入多表的方法 从 触发器内部找到修改的数据 插入3个表 
      

  10.   

    用PL/SQL
    在插入table_Question时候,把触发器生成的ID保存Declare
    vqid int;
    vq varchar2(100);
    vaid int;
    va varchar2(100);BEGIN
    --对table_QuestionAndAnswer的记录循环,作如下处理:
    --1,
    insert into table_Question(question) values('q1')
    RETURNING id, question
    INTO vqid , vq ;
    --2,
    insert into table_Answer(answer ) values('a1')
    RETURNING id, question
    INTO vaid, va ;--insert into table_Relation(vqid ,vaid );END;