1

複数のフィールドに基づいて重複する値を作成せずに、tblA の一意の値を tblB に追加したいと考えています。次の例では、FirstName と LastName が重複を判断し、Foo と Source は無関係です。

表:

FirstName LastName Foo ソース
ジョン・ドウ 1A
ジェーン ドウ 2 A
スティーブ スミス 3 A
ビル・ジョンソン 2A

表:

FirstName LastName Foo ソース
ジョン ドゥ 1 B
ボブ スミス 5 B
スティーブ スミス 4 B

これは私が望む結果です:

表:

FirstName LastName Foo ソース
ジョン・ドウ 1A
ジェーン ドウ 2 A
スティーブ スミス 3 A
ビル・ジョンソン 2A
ボブ スミス 5 B  

これは私が試したコードと同等のものです:

INSERT INTO tblA
SELECT B.* FROM tblB AS B
LEFT JOIN tblA AS A ON A.FirstName = B.FirstName AND A.LastName = B.LastName
WHERE A.FirstName IS NULL

そして、これは私が得る結果です:

表:

FirstName LastName Foo ソース
ジョン・ドウ 1A
ジェーン ドウ 2 A
スティーブ スミス 3 A
ビル・ジョンソン 2A
ジョン ドゥ 1 B
ボブ スミス 5 B

tblB の Steve Smith は無視されます。これは良いことです。tblB の John Doe が追加されましたが、これは悪いことです。私はこれにあまりにも多くの時間を費やし、考えられるあらゆる方法でデータを調べて、tblA と tblB の John Doe が同じ姓名であることを確認しました。何がうまくいかないのかについてのアイデアはありますか?

更新: 参考までに、私の実際の tblB では、30,000 のうち約 10,000 を tblA に移動する必要があります。これは実際には 21,000 を超えています。問題は、これが一般的なプロセスの 1 つのステップであることです。

4

3 に答える 3

1

私がしようとすると:

SELECT tbb.*
FROM tbb 
LEFT JOIN tba 
ON (tbb.FirstName = tba.FirstName) 
   AND (tbb.LastName = tba.LastName)
WHERE (((tba.LastName) Is Null));

返される唯一の行は次のとおりです。

Bob        Smith     5    B

John Doe に隠れたキャラクターがいる可能性はありますか?

于 2012-08-02T21:18:46.063 に答える
0

編集:申し訳ありませんが、Access2007では動作しません

あなたはそれを行う多くの方法があります:

INSERT INTO tblA 
SELECT B.* FROM tblB AS B 
WHERE B.firstname, B.lastname NOT IN (select firstname, lastname from tblA)

または

INSERT INTO tblA 
SELECT * FROM tblB
MINUS
SELECT * FROM tblA
于 2012-08-02T21:09:01.377 に答える
0

これは Access で動作します。

無限に実行できます-必要以上の行を追加しません:

INSERT INTO tblA
SELECT B.*
FROM tblB AS B
WHERE (((B.FirstName) Not In (select firstname from tblA))
AND ((B.LastName) Not In (select firstname from tblA)))
于 2013-04-05T15:45:29.237 に答える