数据库中一个表里存有数据:
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语句怎么写?
万分感谢!
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语句怎么写?
万分感谢!
解决方案 »
- 急求一条sql语句,急急急
- PL/SQL 分组多列显示 问题,求教! [棘手]
- oracle 字符集问题
- 在WINDOWS下如何访问UNIX下的ORACLE数据库
- 9个G的oracle数据库如何迁移到别的oracle服务器上,谢谢
- 关于oracle中的日期比较
- Oracle数据库中日期存的是字符性,值为13位的数据串,如"1136836800000",请问哪位大虾知道有什么函数可以直接转换,谢谢!!
- sqlplus有什么方法看到调用存储过程的返回记录集
- 如何得知当前oracle有几个数据库
- 如何更新这样的SQL?
- 我建的DBLINK为什么总是报”ORA-12154: TNS: 无法处理服务名“的错呢?代码如下:
- 问个求日期的表达式
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 ;参考这个
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
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才是唯一的。
有没有更好的方法呢?
哎!真不知道怎么办好!在线等待csdn前辈解答!
2,根据qaid列插入table_Relation。
3,删掉table_Question,table_Answer中增加的qaid列
1,建两个临时表,(qaid是第一个表的id),在触发器里同时查入记录到临时表
tmp_table_Question(id(主键,触发器生成)、question,qaid)
tmp_table_Answer(id(主键,触发器生成)、answer,qaid)2,根据临时表插入table_Relation
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个表
在插入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;