2013-01-20 175 views
3

我有一张表,我们将调用Table1,其中包含一堆垃圾数据并且没有唯一标识符列。在特定列中删除具有重复列数据的行

我想从Table1中选择一些列并将数据传输到Table2。但是,在传输之后,我需要删除Table2中的行,其中有3个列中有重复。

比方说,我有[City][FirstName][LastName][CompanyName],表2中的一行,并已传输的[State]。我只想要保留[FirstName][LastName][CompanyName]的唯一组合的行。要增加混淆,[LastName]和/或[CompanyName]可能包含NULL值。我怎么能做到这一点?预先感谢您的帮助。

+0

哪些DBMS您使用的?甲骨文? PostgreSQL的? –

+1

'SELECT DISTINCT [FirstName],[LastName],['CompanyName'] FROM [Table]'Hav u试试这个? – DON

回答

3

可以使用distinct关键字创建唯一条目。

select distinct 
     FirstName, 
     LastName, 
     CompanyName 
    from MyTable 

因此,如果您发出以下命令,你只会不同的值添加到新表

insert into newTable 
(
     FirstName, 
     LastName, 
     CompanyName 
) 
select distinct 
     FirstName, 
     LastName, 
     CompanyName 
    from MyTable 
where not exists (
    select 1 from newTable 
    where newTable.FirstName = MyTable.FirstName 
     and newTable.LastName = MyTable.LastName 
     and newTable.CompanyName = MyTable.CompanyName 
) 

另一种很好的方式,不同的新值添加到一个表可以通过完成了“ MERGE'命令。

merge newtable as target 
using (select distinct 
       FirstName, 
       LastName, 
       CompanyName 
     from MyTable 
     ) as source 
    on target.FirstName = target.FirstName 
    and target.LastName = target.LastName 
    and target.CompanyName = target.CompanyName 

when not matched by target then 
    insert (FirstName, 
      LastName, 
      CompanyName) 
    values (target.FirstName, 
      target.LastName, 
      target.CompanyName); 

MERGE命令为您提供了控制何时想要同步表的选项。

0

在这里看到的例子,可能这就是你想要的东西.. link

insert into Table2(`firstname` , `lastname` , `companyname`) 
select a.firstname,a.lastname,a.companyname 
from 
(select distinct(concat(firstname,',',lastname,',',companyname)) 
,firstname,lastname,companyname from Table1) a; 
0
create table t2 
as 
select distinct FirstName,LastName,CompanyName,City,State from t1; 

with the below query u 'll get to know we have duplicate entries or not. 
select FirstName,LastName,CompanyName,count(*) from t2 
group by FirstName,LastName,CompanyName 
having Count(*) >1; 

delete from t2 a where rowid not in (select min(rowid) from t2 b where a.column1=b.column1 
and .....); 
相关问题