现在数据库中跟据姓名查出两条记录(呈现在页面上) ,但是可以肯定这两条记录是一个人。如下:
字段 name sex brithdate arg idcard org
1 张三 男 123456 设计院
2 张三 1988-06-07 20 123456 现在要操作这两条记录进行比对 要删除第二条 (重点:要把第一条的信息从第二条中取到并补全第一条的空缺位置)
这样的话就会设计到一方面的问题 怎样判断第1条的哪些字段是空的。并把第2条的信息提取到第一条的空缺处
字段 name sex brithdate arg idcard org
1 张三 男 123456 设计院
2 张三 1988-06-07 20 123456 现在要操作这两条记录进行比对 要删除第二条 (重点:要把第一条的信息从第二条中取到并补全第一条的空缺位置)
这样的话就会设计到一方面的问题 怎样判断第1条的哪些字段是空的。并把第2条的信息提取到第一条的空缺处
解决方案 »
- 关于JDBC连接ORACLE的问题~~~~~~~~~~~~~
- PL/SQL问题
- 不会再问我
- oracle基础问题
- 对引索优化问题
- 简单问题
- oracle8i的数据库恢复,在线等,请各位高手帮忙一下。
- 能否通过DBLink将另一台机器上的一个表的数据、索引一起移到本机?
- 这句话对不对啊:select * from table where rownum<1000 and rwonum>100,如果不对该怎么改啊
- 如何检索出日期型字段为空的数据?
- 数据不是很大,检索那么慢。请给优化下。100分
- orcle8i数据库中的REDO01-REDO03日志文件被优化大师删掉,在ORACLE里怎么恢复,怎么重做日志文件
SELECT NAME,
MAX(SEX),
MAX(BRITHDATE),
MAX(ARG),
MAX(IDCARD),
MAX(ORG)
FROM TABLE_NAME TT
GROUP BY NAME;
为空的应该也没关系吧,lz试下下面的sql
update table_name t set(SEX,BRITHDATE,ARG,IDCARD,ORG)=
(SELECT
MAX(SEX),
MAX(BRITHDATE),
MAX(ARG),
MAX(IDCARD),
MAX(ORG)
FROM TABLE_NAME TT
GROUP BY NAME where t.name=tt.name);没有测试啊,不知道正确不,这样update后二条sql再随便delete掉一个都行。
像arg字段,从数据上看应该取第二条,而idcard,则要取第一条
这种规律看不出来的,就很难去取舍了
(SELECT
MAX(SEX),
MAX(BRITHDATE),
MAX(ARG),
MAX(IDCARD),
MAX(ORG)
FROM TABLE_NAME TT
GROUP BY NAME where t.name=tt.name);
是正确的。
(SELECT
MAX(SEX),
MAX(BRITHDATE),
MAX(ARG),
MAX(IDCARD),
MAX(ORG)
FROM temp_tableName TT
where t.name=tt.name GROUP BY NAME )
WHERE t.rowid = (SELECT MIN(rowid) row_id FROM temp_tableName ttt where t.name=ttt.name GROUP BY NAME )
(SELECT
MAX(SEX),
MAX(BRITHDATE),
MAX(ARG),
MAX(IDCARD),
MAX(ORG)
FROM temp_tableName TT
where t.name=tt.name GROUP BY NAME )
WHERE t.rowid = (SELECT MIN(rowid) row_id FROM temp_tableName ttt where t.name=ttt.name GROUP BY NAME );DELETE FROM temp_tableName WHERE ROWID IN (SELECT MAX(ROWID) row_id FROM temp_tableName GROUP BY NAME);
(SELECT
MAX(SEX),
MAX(BRITHDATE),
MAX(ARG),
MAX(IDCARD),
MAX(ORG)
FROM temp_tableName TT
where t.name=tt.name GROUP BY NAME )
WHERE t.rowid = (SELECT MIN(rowid) row_id FROM temp_tableName ttt where t.name=ttt.name GROUP BY NAME );DELETE FROM temp_tableName WHERE ROWID IN (SELECT MAX(ROWID) row_id FROM temp_tableName GROUP BY NAME);