Mysql テーブルで利用可能な最小 ID 値を照会する方法

Mysql テーブルで利用可能な最小 ID 値を照会する方法

今日、研究室のプロジェクトを見ていたとき、私にとって「難しい」問題に遭遇しました。実は、それは私があまりにも愚かだったからです。まずSQL文を捨てる

// このステートメントは、ID が 1 でない場合、正しいクエリ結果を取得できません。
存在しない oslist c から min(id+1) を選択します (id = c.id+1 である oslist から id を選択します);

このクエリ ステートメントを初めて見たとき、長い間 SQL に触れていなかったためか、完全に混乱しました。

1 存在する構文

SQL 構文では、exists を使用して結果をフィルタリングします。実際の実行プロセスでは、EXISTS ステートメントは外部テーブルをループし、ループが繰り返されるたびに内部テーブルをクエリします。外部テーブルのレコードをサブクエリに 1 つずつ代入します。サブクエリの結果セットが空の場合は、存在しないことを意味し、それ以外の場合は存在します。

ここで注意すべき点は、外部テーブルのレコードをサブクエリに代入するのは、実質的な値の比較を行うのではなく、クエリ結果が空かどうかを確認するためだけであるということです。

例を見てみましょう:

テーブル oslist の id が 1、2、3、4、5、6、7、8、9、10、11、14、15 の場合。ここでは、記事の冒頭にある SQL ステートメントを自己接続を使用して使用します。

クエリのプロセスは次のようになります。

id 1 を取得し、oslist に id = 2 があるかどうかを確認します。存在する場合は結果セットに含まれません。
id 2 を取得し、oslist に id = 3 があるかどうかを確認します。存在する場合は結果セットに含まれません。
id 3 を取得し、oslist に id = 4 があるかどうかを確認します。存在する場合は結果セットに含まれません。
id 4 を取得し、oslist に id = 5 があるかどうかを確認します。存在する場合は結果セットに含まれません。
ID 5 を取得し、oslist に ID = 6 があるかどうかを確認します。存在する場合は結果セットに含まれません。
ID 6 を取得し、oslist に ID = 7 があるかどうかを確認します。存在する場合は結果セットに含まれません。
ID 7 を取得し、oslist に ID = 8 があるかどうかを確認します。存在する場合は結果セットに含まれません。
ID 8 を取得し、oslist に ID = 9 があるかどうかを確認します。存在する場合は結果セットに含まれません。
ID 9 を取得し、oslist に ID = 10 があるかどうかを確認します。存在する場合は結果セットに含まれません。
ID 10 を取得し、oslist に ID = 11 があるかどうかを確認します。存在する場合は結果セットに含まれません。
ID 11 を取得し、oslist に ID = 12 があるかどうかを確認します。存在しない場合は結果セットに含まれます。
ID 14 を取得し、oslist に ID = 15 があるかどうかを確認します。存在する場合は結果セットに含まれません。
ID 15 を取得し、oslist に ID = 16 があるかどうかを確認します。存在しない場合は結果セットに含まれます。
(11+1) と (15+1) の間の最小値を取得し、結果を返します。

クエリを終了します。

ps: MySQL で最小の ID を持つデータを削除します

//方法1
 tablenamewhere id in (select id from (select min(id) id from tablenamec1) t1) から削除します。 
//方法2
テーブル名から削除、ID 昇順、制限 1 で並べ替え。

要約する

上記は私があなたに紹介した方法です。お役に立てれば幸いです。ご質問があれば、メッセージを残してください。すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • Mysql で ID の最大値、テーブル内のレコードの総数、その他の関連する問題を取得するための方法の概要
  • PHP で新しい MySql レコードの ID 値を取得する 3 つの方法
  • MySQLの自動増分IDの開始値を変更する方法
  • 最後に挿入された MySQL レコードの自動増分 ID 値を取得する 3 つの Java メソッド
  • MySQLのLAST_INSERT_IDを使用して、各サブテーブルの一意のID値を決定します。

<<:  JavaScriptはPromiseを使用して複数の繰り返しリクエストを処理します

>>:  Linux でハードディスクのサイズを確認し、ハードディスクをマウントする方法

推薦する

Vue Element-ui フォーム検証ルールの実装

目次1. はじめに2. ルール検証の入力モード2.1 サンプルコード2.2、フォーム項目2.3. 小...

nginx での書き換えジャンプの実装

1. 新旧ドメイン名のジャンプ適用シナリオ: ドメイン名ベースのリダイレクト。会社の古いドメイン名は...

この記事では、VUE の複数の DIV とボタン バインディングの Enter イベントを実装する方法を説明します。

現在、OK ボタンをクリックしたときやキーボードの Enter キーを押したときに操作を実行するとい...

Vue ライフサイクルの紹介とフック関数の詳細な説明

目次Vueライフサイクルの紹介とフック機能VUEライフサイクルフックVue ライフサイクルの紹介作成...

CSS と JS を使用して下線効果を実装する方法の例

この記事では、主に 2 種類の下線の動的効果について説明します。1 つ目は、ホバーすると X 軸が内...

【HTML要素】画像の埋め込み方法

img 要素を使用すると、HTML ドキュメントに画像を埋め込むことができます。画像を埋め込むには、...

Vueルータールーティングの詳細な説明

目次1. 基本的な使い方2. 注意すべき点3. マルチレベルルーティング(マルチレベルルーティング)...

MySQL はどのようにしてマスターとスレーブの一貫性を確保するのでしょうか?

目次MySQLマスタースレーブの基本原理3つのbinlog形式の比較混合形式のバイナリログが存在する...

MySQLでテーブルを作成し、フィールドコメントを追加する方法

コードと例を直接投稿する #テーブル作成時にコメントを記述する CREATE TABLE useri...

uniapp プロジェクトで MQTT を使用する方法

目次1. uniappプラグインマーケットのリファレンスプラグイン2. 具体的な導入プロセス1. m...

MySQL 8.0.15 winx64 解凍版のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.15 winx64解凍版のインストールと設定方法を紹介します。具体...

Linux tac コマンドの実装例

1. コマンドの紹介tac (cat の逆順) コマンドは、ファイルの内容を行単位で逆順に出力します...

円形/扇形メニューを2分で実装する方法を教えます(基本バージョン)

序文このプロジェクトでは円形のメニューが必要です。オンラインで検索しましたが、適切なものが見つからな...

入力できない無効な値はアクションレイヤーに渡すことができません

フォームを入力不可にしたい場合は、フォームを次のように設定します。コードをコピーコードは次のとおりで...

Linux (Centos7) に mysql8.0.18 をインストールするチュートリアル図

1 インストールリソースパッケージmysql-8.0.18-1.el7.x86_64.rpm-bun...