質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

4回答

1201閲覧

データのマッチ度の調査

piropiropiro

総合スコア15

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2019/04/04 20:29

フィールド名の調査

3年ほど前にテーブルAからテーブルBにデータを移したのですが、
どのフィールドにデータを移行したのか調査する必要が出たらしく、

テーブルAのフィールドのデータが、テーブルBのどのフィールドに移ったのか
を調べているのですが、正直どうすればいいのかわからないって状態です。

仮に
テーブルA
列1
列2
列3

テーブルB
列1
列2
列3

みたいな風に並んでいたら、どういう風に調べればいいのでしょうか?
質問が曖昧かもしれませんが、ご回答よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2019/04/05 02:05

移したとする判断条件は何ですか? 移すのはどのような方法で行ったのでしょうか? テーブルAの内容をBに追加・更新ですか?
piropiropiro

2019/04/05 03:57

私が移したわけではないので、判断条件はなんともいえません。 各データを見るに、AからSELECT→BにINSERT、 一部のデータは表示が変わったり、B自体のデータが追加、更新しています。
piropiropiro

2019/04/05 07:33

検索していろいろ調べてみた結果、主キー自体の値が変わっていたみたいです。 やりようがないということで、回答をしめます。 回答していただいた方、ありがとうございました。
guest

回答4

0

union マージを使用して、相違があるデータを抽出します。
その内容を条件にどのデータに相違があるかを出力します・
※記述にKeyとあるのは一意キーを表しています。

SQL

1select * from ( 2 select 'A' type, * from ta 3union all 4 select 'B' type, * from tb 5) 6where key in ( 7 select key from ( 8 select * from ta 9 union 10 select * from tb 11 ) 12 group by key 13 having count(*)>1 14 ) 15order by key, type

投稿2019/04/05 06:40

編集2019/04/05 06:41
sazi

総合スコア25197

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2019/04/05 06:45

データ量次第ですけど、実用に耐えうるレスポンスになるかどうかは不明ですけどねぇ
guest

0

coco_bauerさんが書かれているように地道に調べるしかないと思います。

気休めに各フィールドをソートして出力する感じでしょか。
データ件数もフィールド数も分からないのであれですが
多いならサンプリングの方法を検討するのかなあ。

完全一致前提なら考えることは少なくなりますけどねえ。

投稿2019/04/05 01:51

takasima20

総合スコア7460

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

piropiropiro

2019/04/05 04:03

Aのフィールド1に対して、Bのフィールド全体の一致率を調べるという SQLは何とか作ることができました。 ただAのフィールド自体が数十とあるので、そこは地道に調べるしかないですね・・・
guest

0

テーブルAのデータのほとんどがテーブルBに移されているのであれば、両方のテーブルで各フィールドのデータのリストを作成し、それらをテーブル間で比較するのが素直なように思います。

例えば、テーブルAが

フィールド1フィールド2フィールド3
山本2Tky
鈴木1Osk
斎藤1Fko
トランプ1Iwa

テーブルBが

フィールド1フィールド2フィールド3
Osk鈴木1
Iwaトランプ1
Fko斎藤1

だとして、これから作られる、各フィールドのデータのリストは、

テーブルA
フィールド1 [斎藤,鈴木,トランプ,山本]
フィールド2 [1,1,1,2]
フィールド3 [Fko,Iwa,Osk,Tky]

テーブルB
フィールド1 [Fko,Iwa,Osk]
フィールド2 [斎藤,鈴木,トランプ]
フィールド3 [1,1,1]

データのリストが全て揃ったところで、テーブルAのフィールド1のデータのリスト([斎藤,鈴木,トランプ,山本])と、テーブルBの各フィールドのデータのリスト([Fko,Iwa,Osk],[斎藤,鈴木,トランプ],[1,1,1])を比較すれは、フィールド2のデータのリストとの類似度が一番高いので、テーブルAのフィールド1は、テーブルBのフィールド2に移った可能性が高いと推測できます。

同様にテーブルAの他のフィールドのデータのリストとテーブルBの各フィールドのデータのリストを比較するという作業を繰り返せば、それぞれのフィールドについて移行先の可能性の高いフィールドを推測できると思います。

投稿2019/04/05 01:14

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

piropiropiro

2019/04/05 04:08

詳しく回答していただき、ありがとうございます。 coco_bauerさんの言ったとおり、地道に調べてみようと思います。 部分一致である以上最終的には推測するしかないのがもやもやしますね・・・
coco_bauer

2019/04/05 07:09

他人が過去に行った行為を間接的に推測しようとするのですから、スッキリさせるのは難しいですね。 始業日時、終業日時、就労時間、超過勤務時間、といった日時に関するフィールド複数あると、フィールドどうしの類似度を見つけるのが面倒になりますが、統計的に処理をすることで類似性が見つかる場合が有ります。普通の会社だと始業日時は午前中が多く、終業日時は夕方が多い、といった傾向がありますから。
guest

0

ベストアンサー

質問にCREATE TABLE文くらい提示できると適切なコメントが付き易いです。PRIMARY KEY があればPRIMARY KEYでJOINして、

SQL

1SELECT 2 A.COL1 3 , CASE WHEN A.COL1 = B.COL1 THEN '○' END AS COL1_SAME 4 , A.COL2 5 , CASE WHEN A.COL2 = B.COL2 THEN '○' END AS COL2_SAME 6 , A.COL3 7 , CASE WHEN A.COL3 = B.COL3 THEN '○' END AS COL3_SAME 8-- など同じデータ型の列を比較してみては? 9FROM TABLE_A A 10INNER JOIN TABLE_B B 11ON A.PK = B.PK -- PRIMARY KEYの列名 12ORDER BY A.PK ;

投稿2019/04/04 21:49

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

piropiropiro

2019/04/05 04:01

そうですね、CREATE TABLEくらいは書いておくべきでした。 完全一致だとOrlofskyさんの書き方でも間違いなかったのですが、 書き忘れてしまいましたが、今回の場合部分一致なのでうまくいきませんでした。 ただ、INNER JOINからSELECTするという部分から、 UTL_MATCH.JARO_WINKLERを組み合わせて、何とか解決にたどり着くことができました。 つたない情報の中回答いただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問