子查询重复使用的问题

来源:百度知道 编辑:UC知道 时间:2024/05/26 08:07:29
我这个sql是这样的 将数据库中某字段重复的数据 只保留一个
这样 我将 重复得数据都查下出来 作为一个查询 然后根据条件
分组获得保留项 最后要在重复数据得中 剔除保留项 请问能实现吗
设A=select * from temp;
select * from A where id =(select * from A ....)
这中类型 我不想 执行A 两次 想用别的办法替代 看看有什么办法吗

oracle数据库下
如果记录数不多可以使用下面的查询
delete from TAB_NAME a where a.rowid <> (select max(rowid) from TAB_NAME b where b.COL1 = a.COL1);

括号中的where后,你可以加入所有字段相等
b.COL2 = a.COL2 and b.COL3 = a.COL3 ……

sqlserver下

select distinct * from tableName

就可以得到无重复记录的结果集。

如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除

select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp

--创建测试表
CREATE TABLE Data(ID int identity(1, 1), BM varchar(10), SL int)
GO
--插入测试数据
INSERT INTO Data(BM, SL)
SELECT '005', 40 UNION ALL SELECT '005', 30 UNION ALL SELECT '006', 20 UNION ALL SELECT '020', 30
GO
--在 SQL Server 2000 下的解法(此解法在 SQL Server 2005 下也有效):
UPDATE Data
SET SL = 0
FROM Data X INNER JOIN
(
SELECT A.ID, A.BM, A.SL,
(SELECT COUNT(B.ID) FROM Data B