我有两个表,一个是temptable
,另一个是Persons
。我需要从下面删除temptable
中的重复数据。
表一:
CREATE TABLE temptable
( ID int,
Name varchar(255),
pan varchar(255),
Address varchar(255),
status varchar(255) );
表二:
CREATE TABLE Persons (
ID int,
Name varchar(255),
pan varchar(255),
Address varchar(255),
status varchar(255) );
temptable
中的数据有重复:
-----------------------------------------------------------
ID Name pan Address status
-----------------------------------------------------------
1 Gopal akkoso232l hyd ACCESSED
1 Gopal akkoso232l hyd ACCESSED
2 sAI aaa1213 VIZ PENDING
3 RAM LLWELW1213 hyd ACCESSED
4 ONE ONE12so232l CHN ACCESSED
5 REDDY aZZoWE232l TOW ACCESSED
----------------------------------------------------------
6 sUNRAI akppg8732 hyd ACCESSED
6 sUNRAI akppg8732 hyd PENDING
-----------------------------------------------
我需要如下的主表数据(没有重复):
人员:
------------------------------------------------
ID Name pan Address status
------------------------------------------------
1 Gopal akkoso232l hyd ACCESSED
2 sAI aaa1213 VIZ PENDING
3 RAM LLWELW1213 hyd ACCESSED
4 ONE ONE12so232l CHN ACCESSED
5 REDDY aZZoWE232l TOW ACCESSED
------------------------------------------------
6 SUNRAI akppg8732 hyd ACCESSED
------------------------------------------------
答案 0 :(得分:1)
试试这个
insert into persons ( ID, Name, pan, Address,status)
select ID, Name, pan, Address,status
from
(
select t.*
,row_number over (partition bu id,name,pan,address order by status) as seq
from temptable
)
where seq=1
如果您使用order by,则会先显示ACCESSED
,然后再显示PENDING
。因此row_number将为该组的第一个记录提供seq = 1。
然后使用此seq = 1在插入之前过滤行。
注意:如果除了ACCESSED
和PENDING
之外,您的数据中的状态更多,则此查询可能无效。
答案 1 :(得分:0)
而不是从临时表中删除重复的行,最简单的解决方案就是在填充主表时过滤掉它们:
insert into Persons ( ID, Name, pan, Address,status)
select distinct ID, Name, pan, Address,status
from temptable
/
答案 2 :(得分:-1)
我认为你的主桌是人。
您希望查询从temptable表中删除重复值并插入到人员中。根据您的数据,您发现表temptable中的id字段不是唯一的,因为它具有重复值1.如果id是标识表查询的关键字段应该是
insert into persons
select distinct(id),name,pan,address,status
from temptable;
如果你想将pan区分为不同的字符,那么请使用pan的独特功能。