3

Table1 という名前のテーブルがあり、その中に大量のジャンク データがあり、一意の識別子の列はありません。

Table1 からいくつかの列を選択し、そのデータを Table2 に転送したいと考えています。ただし、転送後、3 つの列に重複がある Table2 から行を削除する必要があります。

Table2 に[FirstName][LastName][CompanyName][City]、および[State]が転送された行があるとします。[FirstName][LastName]、およびの一意の組み合わせを持つ行のみを残したい[CompanyName]。混乱を招くため、[LastName]および/または[CompanyName]NULL値を含めることができます。どうすればこれを達成できますか? 助けてくれてありがとう。

4

3 に答える 3

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
  ) 

別の新しい値をテーブルに追加するもう 1 つの良い方法は、'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コマンドは、テーブルを同期するタイミングを制御するオプションを提供します。

于 2013-01-20T09:26:29.630 に答える
0

ここの例を参照してください。これがあなたが望んでいたものかもしれません..リンク

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;
于 2013-01-20T09:30:09.253 に答える
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 .....);
于 2013-01-20T09:36:36.890 に答える