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

推薦する

Linux 仮想マシンの IP アドレスを変更し、ゲートウェイを確認し、ネットワーク環境を構成する方法に関するチュートリアル

仮想マシンの IP アドレスを変更します。 次のインターフェイスに入り、サブネット IP を直接変更...

MySQL の低速クエリの最適化: 理論と実践からの制限の利点

多くの場合、クエリの結果は最大で 1 つのデータ レコードになることが予想されます。この場合、制限 ...

CSS3 ベジェ曲線の例: リンクホバーアニメーション効果の作成

CSS3 アニメーション トランジションを使用して、リンクの上にマウスを移動すると小さなポップアップ...

判定条件を使用してCSSファイルをインポートする

解決策 1: HEAD に次のコードを挿入するなど、HTML ドキュメントで条件付きインポートを使用...

MySQLは集計関数を使用して単一のテーブルをクエリします

集計関数データセットに作用し、そのデータセットの値を返します。 count: 統計結果のレコード数。...

ページを更新せずにフォームを送信するには iframe を使用します

そこで、この問題を解決するために埋め込みフレームワークを導入します。具体的な原則は、フォームがデータ...

Vue の高度なコンポーネント機能コンポーネントの使用シナリオとソースコード分析

目次導入使用シナリオソースコード分析要約する導入Vue は、コンポーネントをステートレスかつインスタ...

mysql はフィールドコンテンツの一部を置き換え、mysql は関数 replace() を置き換えます。

[mysql] replace の使用方法 (フィールドの内容の一部を置き換える) [mysql]...

MySQL データベース開発の 36 の原則 (要約)

序文これらの原則は実際の戦闘から要約されています。あらゆる原則の背後には血なまぐさい教訓があるこれら...

MySQL 5.7 の /etc/my.cnf パラメータの紹介

以下は、mysql 5.7 の /etc/my.cnf の一般的なパラメータの一部です。これらを自分...

MYSQL パフォーマンス アナライザー EXPLAIN 使用例分析

この記事では、例を使用して MYSQL パフォーマンス アナライザー EXPLAIN の使用方法を説...

開発にVscodeとdockerを組み合わせて使用​​する詳細なプロセス

序文Docker と VS Code を使用すると、ローカル開発環境全体を最適化し、プロジェクトの進...

Vue Router の 10 の高度なヒントのまとめ

序文Vue Router は、Vue.js の公式ルーティング マネージャーです。 Vue.js の...

Vue フィルター、ライフサイクル関数、vue-resource の簡単な紹介

1. フィルター例: <!DOCTYPE html> <html lang=&qu...

親ページの更新を制御するために HTML で iframe を実装するためのアイデアとコード

1. 応用シナリオ親ページ a.jspサブページ b.jsp (ページ a に埋め込まれた ifra...