Mysql 用于删除临时表中重复行的查询
我有两个表,一个是Mysql 用于删除临时表中重复行的查询,mysql,database,oracle,plsql,rows,Mysql,Database,Oracle,Plsql,Rows,我有两个表,一个是attreable,另一个是Persons。我需要在下面从tentable中删除重复数据 表一: CREATE TABLE temptable ( ID int, Name varchar(255), pan varchar(255), Address varchar(255), status varchar(255) ); 表二: CREATE TABLE Persons ( ID int,
attreable
,另一个是Persons
。我需要在下面从tentable
中删除重复数据
表一:
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) );
tentable
中的数据有重复项:
-----------------------------------------------------------
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
------------------------------------------------
我想你们的主桌是人吧 您需要一个查询来从可诱惑的表中删除重复值并插入到persons中。从您的数据中可以发现,表中的id字段不是唯一的,因为它的重复值为1。如果id是标识表查询的关键字段
insert into persons
select distinct(id),name,pan,address,status
from temptable;
如果希望将pan区分为不同的字符,则在pan中使用不同的功能。而不是从临时表中删除重复的行。最简单的解决方案是在填充主表时将其过滤掉:
insert into Persons ( ID, Name, pan, Address,status)
select distinct ID, Name, pan, Address,status
from temptable
/
试试这个
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,则将首先显示已访问的
,然后显示待处理的。因此,对于组的第一条记录,行_编号将给出seq=1
然后使用此seq=1在插入之前过滤行
注意:如果您的数据中除了已访问
和待处理
之外还有更多状态,则此查询可能不起作用 您使用的是MySQL还是Oracle?您是否尝试四处搜索此问题的解决方案?Oracle:。。。MySQL:如果在可诱惑的中有两行特定的名称
,一行为已访问的
状态,另一行为待处理的
状态,那么已访问的
行是否应该出现在人员
表中?更一般地说,请定义“重复数据”。如果status
可以在tentable
中变化,那么还有哪些列可以不同?另外,为什么sUNRAI
的情况得到纠正,而sAI
的情况没有得到纠正?在某些情况下,我可能得到的状态仅与已访问和待处理的状态不同。在这种情况下,我只需要插入已访问的pan数据。对于名称sUNRAI
,在中有两种状态。然而,Persons
表中只有一行。感谢您的帮助。上面的场景(不同)解析相同的数据。但我还有一个问题。如果相同的pan包含不同的状态,如“已访问”和“挂起”,在此场景中,我只需要“已访问”的pan行数据。请使用,谢谢您的帮助。上述场景(不同)解决了问题,但我还有一个问题。但同一个pan包含不同的状态,如“已访问”和“挂起”。在此场景中,我只需要“已访问”pan行数据。然后将插入第一个pan行数据,从而删除重复的pan