Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 用于删除临时表中重复行的查询_Mysql_Database_Oracle_Plsql_Rows - Fatal编程技术网

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