Sql 删除特定列中具有重复列数据的行
我有一个表,我们称之为Table1,其中包含大量垃圾数据,没有唯一标识符列 我想从表1中选择一些列,并将数据传输到表2。但是,在传输之后,我需要从表2中删除其中3列中有重复项的行Sql 删除特定列中具有重复列数据的行,sql,Sql,我有一个表,我们称之为Table1,其中包含大量垃圾数据,没有唯一标识符列 我想从表1中选择一些列,并将数据传输到表2。但是,在传输之后,我需要从表2中删除其中3列中有重复项的行 假设我在表2中有一行,其中包含传输的列[FirstName],[LastName],[CompanyName],[City]和[State]。我只希望保留具有[FirstName]、[LastName]和[CompanyName]唯一组合的行。更令人困惑的是,[LastName]和/或[CompanyName]可能包含
假设我在表2中有一行,其中包含传输的列
[FirstName]
,[LastName]
,[CompanyName]
,[City]
和[State]
。我只希望保留具有[FirstName]
、[LastName]
和[CompanyName]
唯一组合的行。更令人困惑的是,[LastName]
和/或[CompanyName]
可能包含空值。我怎样才能做到这一点?提前感谢您的帮助。可以使用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
命令提供了控制同步表的选项 看这里的例子,也许这就是你想要的
您使用的是哪种数据库管理系统?神谕PostgreSQL?
从[Table]中选择不同的[FirstName],[LastName],“CompanyName”]
您尝试过这个吗?
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;
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 .....);