0

誰か助けてくれませんか?

データベース内に、同一の列を持ち、同じタイプのデータを含む 2 つのテーブルがあります。私の最初のテーブルは、過去 6 年間維持してきたもので、数百万のレコードが含まれています。私の 2 番目のテーブルは、1 億を超えるレコードを含む、他の場所から提供されたテーブルです。表 2 のデータの一部は、既に表 1 に含まれている可能性があります。

私が達成しようとしているのは、テーブル 2 の一意のレコードをテーブル 1 に追加することです。

私の PK は両方のテーブルで同じであり、重複しているかどうかを識別するのはこの列です。

プロセスの最後に重複レコードを表示して、これらを確認できるようにする必要があるという問題が発生します。

SQL の基本的な知識は十分にありますが、これを達成するのに十分なほど高度ではありません。誰かが助けてくれるなら、それは大歓迎です。

4

4 に答える 4

0

してみてください:

INSERT INTO Table1
SELECT DISTINCT * FROM Table1 
WHERE PrimaryKeyColumn NOT IN (SELECT PrimaryKeyColumn from Table1)
于 2013-04-24T11:35:41.297 に答える
0

Sql 2008を使用しているため、Mergeステートメントの使用を検討してください。これにより、一意のキーが挿入されます

MERGE ONE AS Tar
USING (SELECT Id FROM TWO) AS Sor
ON Tar.Id=Sor.Id
WHEN NOT MATCHED THEN
INSERT(Id)
values(Sor.Id);

これにより、重複したキーが表示されます

SELECT B.ID
FROM ONE A
LEFT JOIN TWO B
ON A.ID=B.ID
WHERE B.ID IS NOT NULL  
于 2013-04-25T12:31:45.337 に答える
0

このようなもの:

-- store the duplicates
SELECT t2.id
INTO #tempTable
FROM table2 t2
JOIN table1 t1 ON t1.id = t2.id

-- insert the non-duplicates
SELECT t2.*
INTO table1
FROM table2 t2
LEFT JOIN #tempTable t1 ON t1.id = t2.id
-- Alternative to above - LEFT JOIN table1 t1 ON t1.id = t2.id
WHERE t1.id IS NULL

-- display the duplicates
SELECT t1.*, t2.*
FROM #tempTable
JOIN table1 t1 ON tempTable.id = t1.id
JOIN table2 t2 ON tempTable.id = t2.id
于 2013-04-24T11:36:09.187 に答える
0
insert into one(...) 
select ...
from two t
where not exists (
  select *
  from one x
  where x.id = t.id
  )
  ;
于 2013-04-24T11:37:56.410 に答える