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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

解決済

2回答

310閲覧

異なる構造のテーブルを比較したい【複数】

Nero1129

総合スコア130

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

0グッド

0クリップ

投稿2022/09/06 08:11

前提

下記のような異なるテーブル構造をしたテーブルAとテーブルBを同士を比較したいです。

もう少し状況を細かく説明します。

  1. テーブルAは正規化した情報を保有。
  2. テーブルBはCSVから取り込んだ情報をそのまま保有し、必要あらばテーブルAへ移行。
  3. テーブルBを画面に出力し、テーブルBにある情報をテーブルAと比較し、テーブルAに既存であれば色をつけたい。

テーブルA-1

ID名前クラス出席番号専攻 ID
1のび太A312
2出来杉A142
3しずかB233

テーブルA-2

ID専攻名
1国語科
2数学科
3社会科

テーブルB(正規化されてない)
*はテーブルAとマッチ

ID名前クラス出席番号専攻
1ジャイアンC12商業科
2出来杉*A14数学科
3のび太C12工業科

実現したいこと

(3)テーブルBを画面に出力し、テーブルBにある情報をテーブルAと比較し、テーブルAに既存であれば色をつけたい。

これを実現させたいのですが、具体案が全然思い浮かばず、いい方法があればご教示いただきたいです。
多分、そもそものアプローチが間違ってる気がしてます…

試したこと

INNER JOINで比較したのですが…
そもそも正規化したテーブル同士をつなげるためのものなので、アンチパターンだと推察
文字列同士の比較なので、単純に実行速度が遅く使い物にならなかった
また、下記のSQLには書いていませんが、テーブルA-2とテーブルBの専攻の文字列も比較したいです。

sql

1SELECT * 2 FROM テーブルB AS B 3 INNER JOIN テーブルA-1 A1 4 ON B.名前 = A1.名前 5 AND B.クラス = A1.名前 6 AND B.出席番号 = A1.出席番号;

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

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

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

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

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

sazi

2022/09/06 08:50 編集

> テーブルBにある情報をテーブルAと比較し 比較するために突合するキー(比較する項目ではない)はどの項目ですか?(IDのみ?)
guest

回答2

0

自己解決

質問の内容で問題を解決しようとしても実行時間等の問題を考慮した場合、これを利用するのは厳しいのでアプローチを変更しました。
テーブルBをeachで回して、テーブルAに毎回照会することによって既存データであるかを確認するようにしました。

投稿2022/09/08 05:42

Nero1129

総合スコア130

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

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

0

まずテーブルAー1のidがユーザーIDではないようなので名前で突合させることになりそうで
そうなるとブレが発生しそうで効率的な処理は難しいでしょう

見た感じテーブルBの専攻はA-2の専攻マスターに完全に含まれていると推定できるので
BにA-2を専攻=専攻名でinner joinし、その名前とテーブルA-1の名前を突合して
専攻IDやクラス、出席番号の検証をすれば良いような気がします。

いずれにしろサンプルが中途半端すぎて検証はむずかしいです

投稿2022/09/06 08:46

yambejp

総合スコア114779

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問