MySQL ジョイントテーブル更新デー​​タの詳細な例

MySQL ジョイントテーブル更新デー​​タの詳細な例

1.MySQL UPDATE JOIN構文

MySQL では、UPDATE ステートメントでJOIN句を使用して、テーブル間の更新を実行できます。 MySQL UPDATE JOIN の構文は次のとおりです。

アップデートT1、T2、
[内部結合 | 左結合] T1 ON T1.C1 = T2.C1
T1.C2 = T2.C2 に設定し、 
 T2.C3 = 式
WHERE条件

MySQL のUPDATE JOIN構文を詳しく見てみましょう。

まず、 UPDATE句の後に、プライマリ テーブル ( T1 ) とプライマリ テーブルを結合するテーブル ( T2 ) を指定します。

次に、使用する結合のタイプ( INNER JOINまたはLEFT JOIN )と結合条件を指定します。 JOIN句はUPDATE句の後に置く必要があります。

3 番目に、更新するT1および/またはT2テーブルの列に新しい値を割り当てる必要があります。

4 番目に、WHERE 句の条件を使用して、更新する行を指定します。

2. 例

まず、これらの例では新しいサンプル データベース ( empdb ) を使用します。サンプル データベースには 2 つのテーブルが含まれています。

  • employeesテーブルには、従業員番号、名前、職務実績、給与に関するデータが格納されます。
  • meritsテーブルには、従業員の業績と業績パーセンテージが保存されます。

次のステートメントは、 empdbサンプル データベースにテーブルを作成し、データをインポートします。

empdbが存在しない場合はデータベースを作成します。

empdbを使用します。
--テーブルを作成する
CREATE TABLEのメリット(
 パフォーマンス INT(11) NOT NULL,
 パーセンテージ FLOAT NOT NULL、
 プライマリキー(パフォーマンス)
);

従業員テーブルを作成する(
 emp_id INT(11) NOT NULL AUTO_INCREMENT,
 emp_name VARCHAR(255) NOT NULL、
 パフォーマンス INT(11) デフォルト NULL,
 給与 FLOAT デフォルト NULL、
 主キー (emp_id)、
 制約 fk_performance FOREIGN KEY (パフォーマンス)
  参考文献 メリット(パフォーマンス)
);

-- 功績表にデータを挿入する
メリット(パフォーマンス、パーセンテージ)に挿入
値(1,0)、
  (2,0.01)、
  (3,0.03)、
  (4,0.05)、
  (5,0.08);

-- 従業員テーブルにデータを挿入する
従業員に挿入(従業員名、業績、給与)  
VALUES('メアリー・ドゥー', 1, 50000),
  (「シンディ・ミンス」、3、65000)、
  (『スー・グリーンスパン』、4、75000)、
  (「グレース・デル」、5、125000)、
  (「ナンシー・ジョンソン」、3、85000)、
  (「ジョン・ドゥ」、2、45000)、
  (「リリーブッシュ」、3、55000)

2.1 MySQL UPDATE JOIN INNER JOIN句を使用した例

従業員の給与をその仕事のパフォーマンスに基づいて調整したいとします。
したがって、功績パーセンテージはmeritsテーブルに格納され、 UPDATE INNER JOINステートメントを使用して、 meritsテーブルに格納されているパーセンテージに基づいて employees テーブル内のemployeesの給与を調整する必要があります。
employeesテーブルとmeritsテーブルはperformanceフィールドによってリンクされます。 次のクエリを参照してください。

上記のクエリはどのように機能しますか?
employeesテーブルのデータのみを更新したいため、 UPDATE句の後にのみemployeesテーブルを指定します。
クエリは、 employeesテーブルの各行について、 employeesテーブルのperformance列の値をmeritsテーブルのperformance列の値と比較します。 一致が見つかった場合は、 meritsテーブルからパーセンテージを取得し、 employeesテーブルのsalary列を更新します。

mysql> select * from employees; -- 以前のデータを更新します+--------+---------------+------------+--------+
| 従業員 ID | 従業員名 | 業績 | 給与 |
+--------+---------------+-------------+---------+
| 1 | メアリー・ドゥ | 1 | 50000 |
| 2 | シンディ・ミンス | 3 | 65000 |
| 3 | スー・グリーンスパン | 4 | 75000 |
| 4 | グレースデル | 5 | 125000 |
| 5 | ナンシー・ジョンソン | 3 | 85000 |
| 6 | ジョン・ドゥ | 2 | 45000 |
| 7 | リリーブッシュ | 3 | 55000 |
+--------+---------------+-------------+---------+
7行セット

mysql> 従業員の更新
  内部結合
 メリット ON employees.performance = merits.performance 
セット 
 salary = salary + salary * percentage; -- 接続更新クエリの実行が成功しました。6 行が影響を受けました。
一致した行: 7 変更された行: 6 警告: 0

mysql> select * from employees; -- 更新されたデータ+--------+---------------+------------+--------+
| 従業員 ID | 従業員名 | 業績 | 給与 |
+--------+---------------+-------------+---------+
| 1 | メアリー・ドゥ | 1 | 50000 |
| 2 | シンディ・ミンス | 3 | 66950 |
| 3 | スー・グリーンスパン | 4 | 78750 |
| 4 | グレースデル | 5 | 135000 |
| 5 | ナンシー・ジョンソン | 3 | 87550 |
| 6 | ジョン・ドゥ | 2 | 45450 |
| 7 | リリーブッシュ | 3 | 56650 |
+--------+---------------+-------------+---------+
7行セット

UPDATEステートメントのWHERE句が省略されているため、 employeesテーブル内のすべてのレコードが更新されます。 performanceレベルが 1 より大きい従業員の給与を更新する必要がある場合、 sql次のように記述できます。

従業員の更新
  内部結合
 メリット ON employees.performance = merits.performance 
セット 
 給与 = 給与 + 給与 * パーセンテージ
ここで、 employees.performance > 1;

2.2 MySQL UPDATE JOIN LEFT JOIN を使用した例

会社が 2 人の新しい従業員を雇ったとします。

従業員に挿入(従業員名、業績、給与)
VALUES('ジャック・ウィリアム',NULL,43000),
  (「リッキー・ボンド」、NULL、52000)

これらの従業員は新入社員であるため、 performanceデータは利用できないか、 NULLなります。今
employeesテーブルのデータは次のとおりです。

mysql> SELECT * FROM 従業員;
+--------+---------------+-------------+---------+
| 従業員 ID | 従業員名 | 業績 | 給与 |
+--------+---------------+-------------+---------+
| 1 | メアリー・ドゥ | 1 | 50000 |
| 2 | シンディ・ミンス | 3 | 66950 |
| 3 | スー・グリーンスパン | 4 | 78750 |
| 4 | グレースデル | 5 | 135000 |
| 5 | ナンシー・ジョンソン | 3 | 87550 |
| 6 | ジョン・ドゥ | 2 | 45450 |
| 7 | リリーブッシュ | 3 | 56650 |
| 8 | ジャック・ウィリアム | NULL | 43000 |
| 9 | リッキー・ボンド | NULL | 52000 |
+--------+---------------+-------------+---------+
9行セット

新入社員の給与を計算する場合、業績データがmeritsテーブルにないため、 UPDATE INNER JOINステートメントは使用できません (使用できない理由については、SQL の左結合、右結合、および内部結合の違いを参照してください)。そのため、これを実装するにはUPDATE LEFT JOINを使用します。
UPDATE LEFT JOINステートメントが、他のテーブルに対応する行がない場合に、一方のテーブルの行を更新する場合。
たとえば、次のステートメントを使用して、新入社員の給与を 1.5% 増額できます。

従業員の更新
  左結合
 メリット ON employees.performance = merits.performance 
セット 
 給料 = 給料 + 給料 * 0.015
どこ
 merits.percentage が NULL です。

実行結果は次のとおりです。

mysql> 従業員の更新
  左結合
 メリット ON employees.performance = merits.performance 
セット 
 給料 = 給料 + 給料 * 0.015
どこ
 merits.percentage が NULL です。
クエリは正常、2 行が影響を受けました
一致した行: 2 変更された行: 2 警告: 0

mysql> 従業員から * を選択します。
+--------+---------------+-------------+---------+
| 従業員 ID | 従業員名 | 業績 | 給与 |
+--------+---------------+-------------+---------+
| 1 | メアリー・ドゥ | 1 | 50000 |
| 2 | シンディ・ミンス | 3 | 66950 |
| 3 | スー・グリーンスパン | 4 | 78750 |
| 4 | グレースデル | 5 | 135000 |
| 5 | ナンシー・ジョンソン | 3 | 87550 |
| 6 | ジョン・ドゥ | 2 | 45450 |
| 7 | リリーブッシュ | 3 | 56650 |
| 8 | ジャック・ウィリアム | NULL | 43645 |
| 9 | リッキー・ボンド | NULL | 52780 |
+--------+---------------+-------------+---------+
9行セット

# 単一テーブル結合
bbs_uhome_card_activate ca を更新し、bbs_uhome_card_rules cr を ca.card_brach=cr.card_bach に設定し、ca.create_user=cr.create_user を設定します。

# 複数テーブルの結合
bbs_uhome_card_order co を更新し、 bbs_uhome_card_order_record cor を co.order_no=cor.order_no で内部結合し、 bbs_uhome_card_activate ca を cor.card_no=ca.card_no で結合し、 co.create_user=ca.create_user を設定します。

これで、MySQL ジョイント テーブル更新デー​​タの詳細な例に関するこの記事は終了です。MySQL ジョイント テーブル更新デー​​タに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL UPDATE ステートメントの非標準実装コード
  • mysql 更新ケース更新フィールド値が固定されていない操作
  • MySQLでレコードを変更する場合、更新操作フィールド = フィールド + 文字列
  • MySQL で結果を選択して更新を実行する例のチュートリアル
  • Mysql トランザクションで Update を実行するとテーブルがロックされますか?
  • 複数のフィールドを変更するためのMysql更新の構文の詳細な分析
  • MySQLのUPDATE文の落とし穴を記録する
  • mysql update文の実行プロセスの詳細な説明
  • Mysql 更新マルチテーブル共同更新方法の概要
  • MySQL 更新セットとの違い

<<:  Tomcat サーバーの設定と Web プロジェクトの公開に関する IDEA グラフィック チュートリアル

>>:  テーブルの動的な色の変更を実現するJavaScript

推薦する

iframeノードの初期化の問題に関する議論

今日、ふとリッチテキストエディタの制作原理を見直してみようと思いました。それで、彼は何も言わずにそれ...

mysql5.7.20 での最初のログイン失敗に対する簡単な解決策

まず、 (1)MySQL 5.7にはデフォルトのパスワードがあるデフォルトのパスワードを見つける g...

Linux redis-Sentinel 設定の詳細

ダウンロードダウンロードアドレス: https://redis.io/download /usr/l...

MySQL ビューの一貫性を確保する方法の詳細な説明 (チェック オプション付き)

この記事では、例を使用して、MySQL ビューの一貫性を確保する方法 (チェック オプションを使用)...

Web フォームの入力要素の高度な使用例 11 選

1. ボタンが押されたときに点線のボックスをキャンセルする<br />入力に属性値hid...

すべてのホストがmysqlにアクセスできるようにする方法

1. MySQLデータベースのユーザーテーブルのレコードのHostフィールド値を%に変更します。奇妙...

Linux 論理ボリューム管理 (LVM) の使用法の概要

ディスク領域の管理は、システム管理者にとって重要な日常的なタスクです。ディスク領域が使い果たされると...

MySQL 5.5 の導入に関する問題

MySQL の導入現在、会社ではプラットフォーム運用を通じてMySQLを導入しています。金曜日、プラ...

MySQL でのテーブルの作成と削除の詳細な例

テーブル作成コマンドには以下が必要です。 テーブルの名前フィールド名各フィールドを定義します(タイ...

画像をハイパーリンクとして使用したときに表示される青いボックスを削除する方法

最近、Dreamweaver を使用して製品プレゼンテーションを作成し、画像にハイパーリンクを追加し...

JavaScript ES6 モジュールの詳細な説明

目次0. モジュールとは何か1.モジュールの読み込み1.1 方法1 1.2 方法2 2. 輸出と輸入...

MySQL 最適化接続最適化

記事「MySQL の最適化: キャッシュの最適化」では、システムによってコンパイルされた変数値、また...

JavaScript を使用したコマンドライン アプリケーションの構築

目次1. ノードをインストールする2. Commander.jsをインストールする3. JavaSc...

さまざまな環境での Docker Compose のインストール方法

1. オンラインインストール現在、Linux x86アーキテクチャのオンラインインストールのみを試し...

win10 64 ビット システムに複数の JDK バージョンをインストールする際の切り替え問題と解決策の概要

コンピューターにmyeclipse2017とidea2017がインストールされているため、ideaが...