今日、SQLトレーニングの質問バンクでこの質問を見ました。これは、非常に代表的なマルチテーブル変更の質問です。実際、この問題を解くのは難しくありません。MySQLとOracleの両方に多くの解決策があります。次に、これらの解決策をまとめます。 msyql での複数のテーブルの変更MySQL でよく使用されるマルチテーブル変更ステートメントについて、例を使用して説明しましょう。 //テーブルを作成する create table aaa(id int,value1 int(5),value2 int(5),value3 int(5),value4 int(5)); aaaのようなテーブルbbbを作成します。 //aaa に値 (1,0,0,0,0),(2,0,0,0,0),(3,0,0,0,0),(4,0,0,0,0),(5,0,0,0,0),(6,0,0,0,0),(7,0,0,0,0); を挿入します。 bbbの値(1,11,12,13,14),(3,31,32,33,34),(5,51,52,53,54)を挿入します。 //バックアップテーブル a1 を作成します。select * from aaa; テーブル b1 を作成し、bbb から * を選択します。 一般的なマルチテーブルの変更: (MySQL と Oracle の両方に適用可能。Oracle については後述) //一般的なマルチテーブルの変更 update a1 set a1.value1 = (select b1.value1 from b1 where a1.id = b1.id), a1.value2 = (a1.id = b1.id の場合、b1 から b1.value2 を選択)。 テーブル関連付けの複数テーブルの変更 (これは MySQL にのみ適用されます) //テーブル関連付けマルチテーブル変更 a1 を更新、b1 を a1.id = b1.id で結合、a1.value1 = b1.value1 に設定、 a1.値2 = b1.値2、a1.値3 = b1.値3; Oracle での複数のテーブルの変更--テーブルを作成します。create table aaa(id number,value1 number,value2 number,value3 number,value4 number); テーブル bbb(id 数値、value1 数値、value2 数値、value3 数値、value4 数値) を作成します。 --データを挿入します。aaa 値に挿入します (1,0,0,0,0);aaa 値に挿入します (2,0,0,0,0);aaa 値に挿入します (3,0,0,0,0); aaa 値に挿入(4,0,0,0,0);aaa 値に挿入(5,0,0,0,0);aaa 値に挿入(6,0,0,0,0); aaa値(7,0,0,0,0)に挿入します。bbb値(1,11,12,13,14)に挿入します。 bbb 値に挿入します (3,31,32,33,34);bbb 値に挿入します (5,51,52,53,54); -- バックアップ create table a1 as select * from aaa; select * from bbb としてテーブル b1 を作成します。 一般的なマルチテーブルの変更: 上記の MySQL ステートメントと同様に、この書き方は比較的理解しやすいですが、効率は本当に不十分です。複数のテーブルの変更で 1 つの列のみを変更する必要がある場合 (一番上の質問のように)、この書き方は問題ありません。 //一般的なマルチテーブルの変更 update a1 set a1.value1 = (select b1.value1 from b1 where a1.id = b1.id), a1.value2 = (a1.id = b1.id の場合、b1 から b1.value2 を選択)。 ただし、複数列の変更に関しては、これはあまり実用的ではありません。Oracle では、複数のテーブルを変更および追加できる構文が提供されています。 合併する merge into は update 文と insert 文を組み合わせたもので、update と insert の機能を同時に実現できます。ここでは説明しませんが、merge into の構文を簡単に紹介します。 merge into target table a --- into で指し示されるターゲット テーブルは、更新するテーブルです。 ソース テーブル b の使用 --- using によってポイントされるテーブルは変更できません。ビュー、結果セットなどにもできます。 on(a.id = b.id) --- on() には、ターゲット テーブルとソース テーブルを一致させるための条件が含まれます。条件が満たされると、一致は成功します。 一致した場合は --- 一致した場合は、その後に変更ステートメントが続きます。 更新セット... 一致しない場合は --- 一致しない場合は、新しいステートメントが続きます。 値を挿入します(....); b1を使用してa1にマージする オン(a1.id = b1.id) 一致したら更新する a1.value1 = b1.value1、a1.value2 = b1.value2、a1.value3 = b1.value3 を設定します。 複数テーブルの変更が存在する EXISTS は MySQL および Oracle にも適用されます。テーブル B のデータに基づいてテーブル A を変更するという厳格な要件がない場合は、EXISTS を使用することもできます。 exists を使用した後の SQL 実行順序は、最初に外部クエリを実行し、次に内部クエリを実行するため、複数テーブルの変更でテーブル a1 の値をテーブル a2 の値に変更することはできません。 a1 を更新し、a1.value1 = 99、a1.value2 = 999、a1.value3 = 999 を設定します。 存在する場所(a1.id = b1.id の場合、b1 から value1 を選択)。 これで、Mysql と Oracle でよく使用されるマルチテーブル変更ステートメントに関するこの記事は終了です。Mysql と Oracle でよく使用されるマルチテーブル変更ステートメントの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Docker クリーニングキラー/Docker オーバーレイ ファイルがディスク領域を大量に占有する
目次1. カスタム指示とは何ですか? 2. 指示をカスタマイズする方法フック機能3. 応用シナリオ入...
インストール プロセスは、コンパイル手順を除いて、基本的にソース バージョンと同じです。この記事では...
目次乱数を生成する0から1までの乱数を生成する指定された範囲内で乱数を生成します6桁のモバイル認証コ...
この記事では、ボタン切り替え画像を実現するためのVueの具体的なコードを例として紹介します。具体的な...
インデックスとは何ですか?インデックスは、データベース ストレージ エンジンが指定されたデータをすば...
MySQLをダウンロード5.1.1.1 より前のバージョン私のコンピュータは64ビットなので、Win...
js のイベント ループJavaScript はシングルスレッドなので、同じイベントで実行できるメソ...
水平線<hr /> タグを使用して、現在の位置に水平の分割線を描画します。例: XML/...
目次序文クイックレビュー: JavaScript 関数関数とは何ですか?関数を宣言する関数の呼び出し...
カリで再現まず、必要なvim.basicファイルにsuid権限を設定します。 chmod u+s /...
序文ページを作っていく上で、ページレイアウトに関する内容に遭遇することが多く、面接でも聞かれることも...
1. 基本的な Spring-boot クイックスタート1.1 クイックスタート pom.xml は...
今日、CSDN で HTML テキスト エスケープのちょっとしたトリックを見ましたが、とても簡単です...
本来、この第 7 章では、デザインにおけるレイヤーと空間テクニックについて深く議論するはずです。しか...
例: <html> <ヘッド> <スタイル タイプ="tex...