2013-01-20 3 views
3

J'ai une table que nous appelons Table1 avec un tas de données indésirables et aucune colonne d'identifiant unique.Supprimer des lignes avec des données de colonne en double dans des colonnes spécifiques

Je souhaite sélectionner certaines colonnes du tableau 1 et transférer les données vers le tableau 2. Cependant, après le transfert, j'ai besoin de supprimer des lignes de Table2 avec des doublons dans 3 des colonnes.

Disons que j'ai une ligne Tableau2 avec des colonnes [FirstName], [LastName], [CompanyName], [City] et [State] qui ont été transférés. Je veux que les lignes avec des combinaisons uniques de [FirstName], [LastName] et [CompanyName] restent. Pour ajouter à la confusion, [LastName] et/ou [CompanyName] pourraient contenir des valeurs NULL. Comment pourrais-je accomplir cela? Merci d'avance pour votre aide.

+0

Quel SGBD utilisez-vous? Oracle? PostgreSQL? –

+1

'SELECT DISTINCT [Prénom], [Nom], ['CompanyName'] FROM [Table]' Avez-vous essayé? – DON

Répondre

3

Des entrées uniques peuvent être créées à l'aide du mot clé distinct.

select distinct 
     FirstName, 
     LastName, 
     CompanyName 
    from MyTable 

Donc, si vous exécutez la commande suivante, vous n'ajouter des valeurs distinctes à la nouvelle table

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 
) 

Une autre belle façon d'ajouter de nouvelles valeurs distinctes à une table qui peut être fait en utilisant le ' Commande 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); 

La commande MERGE vous donne la possibilité de contrôler lorsque vous souhaitez synchroniser des tables.

0

voir ici par exemple, peut-être est-ce que tu voulais .. 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 .....); 
Questions connexes