dポイントプレゼントキャンペーン実施中!

いつもお世話になっております。

クエリについてお聞きします。

現在、2つのAccessDBが稼動しており、それを1つにまとめる作業をしています。
2つのDBには似通ったテーブルが存在し、それをマージする方法で悩んでいます。

テーブルA
・社員番号
・社員氏名
・フリガナ
・会社コード
・部署コード

テーブルB
・従業員コード
・従業員名カナ
・従業員名
・所属コード

フィールドの定義としましては、

社員番号=従業員コード
社員氏名=従業員名
フリガナ=従業員名カナ
部署コード=所属コード

となります。
全てテキストのレコードです。

これを、テーブルAを正にして、テーブルBのデータをAにマージしたいのです。

要件としましては、
1.テーブルAに存在する社員コードにマッチするレコードはそのまま残す(Bのデータは無視)
2.テーブルAに存在せず、Bに存在するものをAに追加する
ということです。

クエリを使って色々試しましたが、どうしてもテーブルAに存在するものもアップデートしてしまい、困っています。

どなたかご教授願えれば幸いです。

よろしくお願いいたします。

A 回答 (2件)

>クエリを使って色々試しましたが、どうしてもテーブルAに存在するものも


>アップデートしてしまい、困っています。

リンクテーブルに関しては説明は要らなさそうなので、
純粋にマージ手順を示しておきます。

(1)TABLE-BとTABLE-Aの不一致クエリーを作成

(参考例SQL Query名=Q_不一致)
SELECT T_BBB.従業員コード, T_BBB.従業員名カナ, T_BBB.従業員名, T_BBB.所属コード
FROM T_BBB LEFT JOIN T_AAA ON T_BBB.従業員コード = T_AAA.社員番号
WHERE T_AAA.社員番号 Is Null

(2)(1)で作成した差分をTABLE-Aに追加するクエリーを作成

(参考例SQL)
INSERT INTO T_AAA ( 社員番号, フリガナ, 社員氏名, 部署コード )
SELECT Q_不一致.従業員コード, Q_不一致.従業員名カナ, Q_不一致.従業員名,
Q_不一致.所属コード FROM Q_不一致

注意点(1)
TABLE-Aの項目で、Null禁止(値要求=はい)になっている項目がある場合
その項目に対し、カラ(Null)のデータをセットしようするとエラーになりますので
その時は、一時的にNull許可(値要求=いいえ)にして、追加完了後元に戻しておく事。
    • good
    • 0
この回答へのお礼

早速の回答、ありがとうございました。

結果、うまく行きました。

差分を作って追加、という手順は、目からウロコでした。

初心者ですみません^^;

どうもありがとうございました。

お礼日時:2010/02/23 13:39

テーブルAの名前を「TA」、テーブルBの名前を「TB」とした時、



UPDATE TA RIGHT JOIN TB ON TA.社員番号=TB.従業員コード SET
TA.社員番号 = TB.従業員コード,
TA.社員氏名 = TB.社員氏名,
TA.フリガナ = TB.従業員名カナ,
TA.部署コード = TB.所属コード
WHERE TA.社員番号 Is Null;

では、どうでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

#1さんの方法でうまく行ってしまいましたが、30246kikuさんの方法も試してみようと思います。

どうもありがとうございました。

お礼日時:2010/02/23 13:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す