ホームページ >データベース >mysql チュートリアル >## サブクエリを使用せずに 1 回の操作で MySQL 行を取得および更新するにはどうすればよいですか?

## サブクエリを使用せずに 1 回の操作で MySQL 行を取得および更新するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-25 02:26:30826ブラウズ

## How to Retrieve and Update MySQL Rows in a Single Operation Without Subqueries?

単一のオペレーションで MySQL 行を取得および更新するクエリ

SELECT クエリと UPDATE クエリを単一のオペレーションに結合すると、効率が向上し、コードが削減されます。複雑。この記事では、サブクエリを使用せずにこの目的を達成するための解決策を検討します。

Conundrum

ユーザーは、次の MySQL クエリを組み合わせる際に支援を求めました:

SELECT * FROM table WHERE group_id = 1013 and time > 100;
UPDATE table SET time = 0 WHERE group_id = 1013 and time > 100

主な目標は、「時間」フィールドをゼロに更新しながら、同時に目的の行を取得することでした。

独創的な解決策

この解決策には、保存された行を使用することが含まれます。望ましい結果を達成するための手順。ストアド プロシージャは一連の SQL ステートメントをカプセル化し、1 つの単位として実行できます。

「update_and_retrieve」という名前の次のプロシージャによってタスクが実行されます:

<code class="mysql">CREATE PROCEDURE update_and_retrieve(IN group_id INT, IN time INT)
BEGIN
    DECLARE updated_ids VARCHAR(255);

    UPDATE table SET time = 0 WHERE group_id = group_id AND time > time;

    SET updated_ids = (SELECT GROUP_CONCAT(fooid) FROM table WHERE group_id = group_id AND time > time);

    SELECT * FROM table WHERE fooid IN (updated_ids);
END;</code>

プロシージャの呼び出し

ストアド プロシージャを呼び出すには、次のステートメントを実行するだけです。

<code class="mysql">CALL update_and_retrieve(1013, 100);</code>

これにより、対象となる行の「time」フィールドが 0 に更新され、更新された行が取得されて表示されます。

利点

このアプローチには、次のようないくつかの利点があります。

  • 複数の操作を 1 つの呼び出しに組み合わせることで、不必要なネットワークの往復を回避します。
  • 個別のクエリの必要性を排除することでコード構造を簡素化します。
  • データベースの負荷を軽減することでパフォーマンスを向上させます。

以上が## サブクエリを使用せずに 1 回の操作で MySQL 行を取得および更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。