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 でハードディスクのサイズを確認し、ハードディスクをマウントする方法

推薦する

HTMLノードの追加と削除の簡単な例

<br />HTMLノードの追加と削除の簡単な例<input type="...

MySQLクエリトランザクション処理へのノード接続の実装

目次トピックmysqlの追加、削除、変更、クエリを入力しますMySQL トランザクション処理私は M...

jsでライトスイッチの効果を実現

この記事の例では、ライトスイッチ効果を実現するためのjsの具体的なコードを参考までに共有しています。...

Vscode が Ubuntu にリモート接続する際のエラー問題の解決方法

1. 事件の背景:仕事上、Ubuntu への vscode リモート接続を使用する必要があります。 ...

MySqlエスケープの詳細な使用例

MySQL エスケープエスケープとは、エスケープ文字の本来の意味を意味します。エスケープ文字の目的は...

Nest.js 認証検証方法の例

目次0x0 はじめに0x1 RBAC 実装0x2 クレームベースの承認0x3 統合 CASL 0x4...

Web プロジェクトでの SQL インジェクションの防止

目次1. SQLインジェクションの概要2. SQLインジェクション攻撃の全体的な考え方SQLインジェ...

収集する価値のある Linux ドキュメント編集コマンド 27 個

Linux col コマンドLinux の col コマンドは制御文字をフィルタリングするために使用...

Linux\Nginx 環境での仮想ドメイン名の設定とテスト検証

Nginx 仮想ドメイン名設定を使用すると、ドメイン名を購入せずに特定のドメイン名を介してローカル ...

XAML でボタンを円として再描画する方法

XAML レイアウトを使用する場合、インターフェイスを Metro 風にするために、一部のボタンでは...

Window.nameはクロスドメインデータ転送の問題を解決します

<br />原文: http://research.microsoft.com/~hel...

Ubuntu仮想マシンでシリアル通信にcutecomを使用する方法

Ubuntu仮想マシンでのシリアル通信にcutecomを使用する1. cutecomをインストールす...

MySql のグループ化と各グループからランダムに 1 つのデータを取得する

アイデア: 最初にランダムに並べ替えてからグループ化します。 1. テーブルを作成します。 テーブル...

MySQLの高可用性アーキテクチャの詳細な説明

目次導入MySQL 高可用性マスター 1 つとバックアップ 1 つ: MySQL マスター スレーブ...

LinuxにNginxをインストールする正しい手順

序文私のように、Java バックエンドに勤勉な人であれば、多数のプロジェクト機能を実装することに加え...