这样的sql 语句如何写?

tyrbl 2008-06-11 08:53:12
我要将一个表t_student 中的记录插入到t_good_student 中去,假设这t_student 表只有两个字段name,score.
t_good_student 表也只有2个字段id,name.
现在我面临这样的困难:(1)因为t_student没有主键,所以一个学生可能重复多次。但一个学生只插入到 t_good_student 中一次。
(2)每插入一条记录就在t_good_student 的当前最大id 上加1

我是这样写的;insert into t_good_student (id,name) select (max(id)+1),distinct name from t_good_student,t_student t order by t.name .
执行的时候报错:“ORA-00937 非单组分组函数”错误

请大家帮我想想这样解决这个问题?
...全文
84 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
snowy_howe 2008-06-12
  • 打赏
  • 举报
回复
我感觉在数据库设计上来说,应当先有学生编码,再有学生分数。
请考虑。
chensi05 2008-06-12
  • 打赏
  • 举报
回复
INSERT INTO T_GOOD_STUDENT
(ID, NAME)
SELECT MAX(ID) + 1, NAME
FROM T_GOOD_STUDENT, T_STUDENT T
GROUP BY NAME
ORDER BY T.NAME
oraclelogan 2008-06-12
  • 打赏
  • 举报
回复
INSERT INTO t_good_student
(ID, NAME)
SELECT a.ID + ROWNUM, t.NAME
FROM (SELECT nvl(MAX (ID),0) ID
FROM t_good_student) a,
(SELECT NAME
FROM t_student
GROUP BY NAME
ORDER BY t.NAME) t
xllxllx 2008-06-12
  • 打赏
  • 举报
回复
先创建一个序列,即
create sequence sqe_id
minvalue 1
maxvalue 999999999
start with 1
increment by 1
cache 20
nocycle;
然后插入数据,即:
insert into T_GOOD_STUDENT(id,name)
select sqe_id.nextval,name from T_STUDENT;
阿三 2008-06-11
  • 打赏
  • 举报
回复
你的问题可以用rownumber与分析函数来完成
参考一下这个
with t as (select t.*,row_number() over(partition by GUEST_ID order by ARRIVAL_DATE desc) rn from YKT_VISIT )
select * from t where rn=1
这是从itpub上摘下来的
hebo2005 2008-06-11
  • 打赏
  • 举报
回复
保险点,应该这样
INSERT INTO t_good_student
(ID, NAME)
SELECT a.ID + ROWNUM, t.NAME
FROM (SELECT nvl(MAX (ID),0) ID
FROM t_good_student) a,
(SELECT NAME
FROM t_student
GROUP BY NAME
ORDER BY t.NAME) t
hebo2005 2008-06-11
  • 打赏
  • 举报
回复
建议你这样子
INSERT INTO t_good_student
(ID, NAME)
SELECT a.ID + ROWNUM, t.NAME
FROM (SELECT MAX (ID) ID
FROM t_good_student) a,
(SELECT NAME
FROM t_student
GROUP BY NAME
ORDER BY t.NAME) t
hxmsammi 2008-06-11
  • 打赏
  • 举报
回复
楼上回答的好快啊
hebo2005 2008-06-11
  • 打赏
  • 举报
回复
不过你这样还是不对的啊,id还是只有一个的啊,要做循环才行啊
hebo2005 2008-06-11
  • 打赏
  • 举报
回复
insert into t_good_student (id,name)
select (max(id) over())+1,distinct name
from t_good_student,t_student t order by t.name
adrianlynn 2008-06-11
  • 打赏
  • 举报
回复
insert into t_good_student (id,name)
select max(id)+1,name from t_good_student,t_student t
group by name
order by t.name

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧