MySQL実践スキル: 2つのテーブルに異なるデータがあるかどうかを比較する方法の分析

MySQL実践スキル: 2つのテーブルに異なるデータがあるかどうかを比較する方法の分析

この記事では、MySQL が 2 つのテーブルを比較して、異なるデータがあるかどうかを確認する方法を例を使って説明します。ご参考までに、詳細は以下の通りです。

データ移行では、多くの場合、2 つのテーブルを比較して、一方のテーブルに、もう一方のテーブルに対応するレコードがないレコードを識別する必要があります。

たとえば、古いデータベースとは異なるスキーマを持つ新しいデータベースがあるとします。私たちの仕事は、古いデータベースから新しいデータベースにすべてのデータを移行し、データが正しく移行されたことを確認することです。データをチェックするには、新しいデータベースと古いデータベースの 2 つのテーブルを比較し、一致しないレコードを特定する必要があります。

t1 と t2 という 2 つのテーブルがあるとします。次の手順で 2 つのテーブルを比較し、一致しないレコードを特定します。一般的な考え方は、最初に t1 をチェックし、次にデータ結果セットをループして、他のテーブルを 1 つずつクエリすることです。データが見つかった場合、そのデータは正しいです。見つからない場合、データが欠落しています。

もしこれが本当なら、あなたは本当に若すぎて単純すぎるのです。今回は、union all を使用して 2 つのテーブルを結合し、一時テーブルまたは派生テーブルを使用してデータを比較するという、より簡単なデータ比較ソリューションを紹介します。 union all の SQL の例を見てみましょう。

t1.pk、t1.c1を選択します。
t1から
ユニオンオール
t2.pk、t2.c1を選択します。
t2から

その後、2 つのテーブルを作成し、データを挿入します。その後、テストを行うことができます。まずはテーブルの作成方法を見てみましょう。

テーブルt1を作成します(
 id int auto_increment 主キー、
  タイトルvarchar(255) 
);
テーブルt2を作成します(
 id int auto_increment 主キー、
  タイトルvarchar(255)、
  メモvarchar(255)
);

その後、t1 にデータを挿入します。

t1(タイトル)に挿入
VALUES('行1'),('行2'),('行3');

t2 にデータを挿入してみましょう:

t2(タイトル)に挿入
VALUES('行1'),('行2'),('行3');

では、派生テーブルを使用してデータを比較してみましょう。

SELECT id,タイトル
から (
  t1からid、titleを選択
  ユニオンオール
  t2からid、titleを選択
) 表
GROUP BY id、タイトル
count(*) = 1 である
ID で並べ替える;

もちろん、それらの間に違いはないので、実行後に返されるデータはありません。心配しないでください。t2 テーブルに別のデータ行を挿入しましょう。

t2(タイトル、メモ)に挿入
VALUES('新しい行4','新しい');

その後、2つのテーブルのタイトル列の値を再度比較します。新しい行は一致しない行なので、それが返されます。結果を見てみましょう。

mysql> SELECT id,title
から (
  t1からid、titleを選択
  ユニオンオール
  t2からid、titleを選択
) 表
GROUP BY id、タイトル
count(*) = 1 である
ID で並べ替える;
+----+-----------+
| ID | タイトル |
+----+-----------+
| 4 | 新しい行 4 |
+----+-----------+
セット内の1行

さて、今回のヒントは以上です。

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキル」、および「MySQL データベース ロック関連スキルの概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQL の 2 つのテーブル ストレージ構造 MyISAM と InnoDB のパフォーマンス比較テスト
  • MySQL の異なるデータベースの異なるテーブルからデータをインポートする
  • MySQLテーブル内の重複レコードを見つける
  • MySQLでテーブルデータを削除する方法
  • データベースを削除せずにMySQLのすべてのテーブルを素早く削除する方法
  • MySQLテーブル内の重複データをクエリする方法
  • PHP で MySQL テーブルのフィールド名と詳細情報を取得する方法
  • MySQLデータテーブルフィールドの内容に対するバッチ変更、クリア、コピー、その他の更新コマンド
  • MySQLデータベーステーブルを素早くコピーする方法
  • MySQLは、SELECT文を使用して、指定されたテーブルの指定された列(フィールド)のデータを照会します。
  • MYSQLデータベースの既存のテーブルに新しいフィールド(列)を追加する
  • MySQL で、すべてのデータベースが占有するディスク容量と、単一データベース内のすべてのテーブルのサイズを照会する SQL ステートメント

<<:  VScode リモート SSH リモート編集とデバッグコード

>>:  すべてまたは逆の選択機能を実現するJavaScript

推薦する

高さ:100% が機能しないのはなぜですか?

高さ:100% が機能しないのはなぜですか?この知識は不人気ではありませんが、使用する際には混乱する...

Linux ソフトウェアのインストール場所を確認する簡単な方法

1. ソフトウェアのインストールパスを確認します。 Linuxソフトウェアをインストールできる場所は...

Nginx転送マッチングルールの実装

1. 正規表現マッチング大文字と小文字を区別するマッチングの場合 ~ ~*は大文字と小文字を区別しな...

3次元画像配置効果を実現する純粋なCSSのサンプルコード

1. 要素の幅/高さ/パディング/マージンのパーセンテージ基準要素の幅/高さ/パディング/マージンの...

Websocket に基づくシンプルなチャットルームダイアログの実装

この記事では、WebSocketを使用して簡単なチャットルームの会話を実装するための具体的なコードを...

CSS はこのように使用できますか?気まぐれなグラデーションの芸術

前回の記事「1行のCSSコードの魅力」では、たった1行のCSSコードで生成できる美しい(奇妙な感じと...

Linux でジャンクファイルをエレガントに削除する方法

あなたも私と同じように、コンピューターのファイルを整然と整理し、不要なファイルを適宜削除するプログラ...

IDEA の Docker プラグインを介して SpringBoot プロジェクトをデプロイするプロセスの詳細な説明

1. Dockerリモート接続ポートを設定するサーバー上の docker.service ファイルを...

WeChat アプレットのシンプルなログイン ページの実装 (ソース コード付き)

目次1. 上の写真2. ユーザーが存在しない3. コードをアップロードする1. 上の写真 2. ユー...

MySQLは効率的なインデックス例分析を確立する

この記事では、例を使用して、MySQL で効率的なインデックスを作成する方法について説明します。ご参...

ReactはExcelファイルのインポートとエクスポートを実装します

目次プレゼンテーション層ビジネスレイヤーコアプラグイン xlsx ExcelインポートExcelエク...

要素の高さを下から上へ、上から下へ制御する CSS メソッド

よくある質問から議論を始めましょう。CSS を使用して要素の高さを [ブラウザ コンテンツ ウィンド...

element.style インライン スタイルを変更する方法のチュートリアル

序文上記の Web ページ スタイルを記述しているときに、スタイルの値をどのように変更しても、ページ...