前提
下記のような異なるテーブル構造をしたテーブルAとテーブルBを同士を比較したいです。
もう少し状況を細かく説明します。
- テーブルAは正規化した情報を保有。
- テーブルBはCSVから取り込んだ情報をそのまま保有し、必要あらばテーブルAへ移行。
- テーブルBを画面に出力し、テーブルBにある情報をテーブルAと比較し、テーブルAに既存であれば色をつけたい。
テーブルA-1
ID | 名前 | クラス | 出席番号 | 専攻 ID |
---|---|---|---|---|
1 | のび太 | A | 3 | 12 |
2 | 出来杉 | A | 14 | 2 |
3 | しずか | B | 23 | 3 |
テーブルA-2
ID | 専攻名 |
---|---|
1 | 国語科 |
2 | 数学科 |
3 | 社会科 |
テーブルB(正規化されてない)
※ *
はテーブルAとマッチ
ID | 名前 | クラス | 出席番号 | 専攻 |
---|---|---|---|---|
1 | ジャイアン | C | 12 | 商業科 |
2 | 出来杉* | A | 14 | 数学科 |
3 | のび太 | C | 12 | 工業科 |
実現したいこと
(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.出席番号;
回答2件
あなたの回答
tips
プレビュー