2008-01-21
一道面试遇到的数据库题
关键字: sql 面试题 删除表中重复数据
table test
id name pass
1 aaa 111
2 bbb 222
3 ccc 333
insert into test(name,pass) select name,pass from test
table test
id name pass
1 aaa 111
2 bbb 222
3 ccc 333
4 aaa 111
5 bbb 222
6 ccc 333
去掉重复项
delete from test where id not in(select id from test group by name,pass);
delete from test where id not in (select * from (select * from test group by name,pass) a);
delete from test wehre not exists (select * from test group by name,pass);
三句语句只有第二句在mysql 中调试成功
其他的两条逻辑虽然清楚 但是还要在oracle 中测一下
我通过这个语句得到的提示是
select * from test group by name,pass 这句就可以得到不需要删除的语句
或者说除了这个语句查出来的其他的都是多余的.
测试得到 明显在ORACLE里这种方式行不通
有如下方法在ORACLE里可以实现
delete from test where id not in
(select min(id) from test group by name,pass)
用min();
id name pass
1 aaa 111
2 bbb 222
3 ccc 333
insert into test(name,pass) select name,pass from test
table test
id name pass
1 aaa 111
2 bbb 222
3 ccc 333
4 aaa 111
5 bbb 222
6 ccc 333
去掉重复项
delete from test where id not in(select id from test group by name,pass);
delete from test where id not in (select * from (select * from test group by name,pass) a);
delete from test wehre not exists (select * from test group by name,pass);
三句语句只有第二句在mysql 中调试成功
其他的两条逻辑虽然清楚 但是还要在oracle 中测一下
我通过这个语句得到的提示是
select * from test group by name,pass 这句就可以得到不需要删除的语句
或者说除了这个语句查出来的其他的都是多余的.
测试得到 明显在ORACLE里这种方式行不通
有如下方法在ORACLE里可以实现
delete from test where id not in
(select min(id) from test group by name,pass)
用min();
评论
mryangbing
2008-01-22
mryangbing
2008-01-22
对了 我再补充上一句: 我用的润乾报表是3.5
用的数据库是Oracle
谢谢!!
用的数据库是Oracle
谢谢!!
mryangbing
2008-01-22
各位学友:
大家好!
我也有一道关于数据库的问题: 我用润乾报表统计的时候,报这样的一个错误
: 数据集sxxx1的 sql异常:索引中丢失 IN 或 OUT 参数:: 1 错误来源: 索引中丢失 IN 或 OUT 参数:: 1
我润乾报表的SQL代码如下:
SELECT JLR ,EJLB,SUM(TO_NUMBER(SXSJ)) AS SXSJ
FROM LAB_GZRZ_SXXX,LAB_GZRZ_SXLB
WHERE ((LAB_GZRZ_SXXX.SXLB_ID=LAB_GZRZ_SXLB.ID) AND ( LAB_GZRZ_SXXX.KSSJ>=? OR ? IS NULL) AND ( LAB_GZRZ_SXXX.KSSJ<=? OR ? IS NULL) AND (LAB_GZRZ_SXXX.CENTER_ID=? OR ? IS NULL) AND (LAB_GZRZ_SXXX.JLR_ZJH=? OR ? IS NULL) AND(LAB_GZRZ_SXXX.BUMENID=? OR ? IS NULL))
GROUP BY JLR ,EJLB
ORDER BY JLR ,EJLB
请各位帮忙,在此 我真诚的感谢
谢谢!
祝大家: 新年快乐 工作顺利
大家好!
我也有一道关于数据库的问题: 我用润乾报表统计的时候,报这样的一个错误
: 数据集sxxx1的 sql异常:索引中丢失 IN 或 OUT 参数:: 1 错误来源: 索引中丢失 IN 或 OUT 参数:: 1
我润乾报表的SQL代码如下:
SELECT JLR ,EJLB,SUM(TO_NUMBER(SXSJ)) AS SXSJ
FROM LAB_GZRZ_SXXX,LAB_GZRZ_SXLB
WHERE ((LAB_GZRZ_SXXX.SXLB_ID=LAB_GZRZ_SXLB.ID) AND ( LAB_GZRZ_SXXX.KSSJ>=? OR ? IS NULL) AND ( LAB_GZRZ_SXXX.KSSJ<=? OR ? IS NULL) AND (LAB_GZRZ_SXXX.CENTER_ID=? OR ? IS NULL) AND (LAB_GZRZ_SXXX.JLR_ZJH=? OR ? IS NULL) AND(LAB_GZRZ_SXXX.BUMENID=? OR ? IS NULL))
GROUP BY JLR ,EJLB
ORDER BY JLR ,EJLB
请各位帮忙,在此 我真诚的感谢
谢谢!
祝大家: 新年快乐 工作顺利
myaniu
2008-01-22
http://dev.yesky.com/230/2669730.shtml
使用group by的话,须使用聚集函数。所以ORACLE里的那个写法正确。
其他非聚集字段都要放在group by 后面。
使用group by的话,须使用聚集函数。所以ORACLE里的那个写法正确。
其他非聚集字段都要放在group by 后面。
发表评论
- 浏览: 78516 次
- 性别:

- 来自: 北京

- 详细资料
搜索本博客
最新评论
-
rails 入门笔记(一)---- ...
-- by awfigdww123 -
关于ERP 权限的那次谈话的 ...
怎么说? 可否具体说说?
-- by huangpengxiao -
关于ERP 权限的那次谈话的 ...
很像linux的权限管理。
-- by shellfish -
dwr 框架原理分析(部分)
在客户端写同样是可以的 兄弟 只不过JS代码多点
-- by huangpengxiao -
dwr 框架原理分析(部分)
为了异步刷新, 一般有相关数据库操作, 直接在客户端写无法同时实现这两个功能
-- by zhanjia






评论排行榜