首頁 >資料庫 >mysql教程 >## 如何在不使用子查詢的情況下在單一操作中檢索和更新 MySQL 行?

## 如何在不使用子查詢的情況下在單一操作中檢索和更新 MySQL 行?

Susan Sarandon
Susan Sarandon原創
2024-10-25 02:26:30827瀏覽

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

在單一操作中擷取和更新MySQL 行的查詢

將SELECT 和UPDATE 查詢組合到單一操作中可以提高效率並減少代碼複雜。本文探討了一種不使用子查詢即可實現此目標的解決方案。

難題

使用者在組合以下MySQL 查詢時尋求協助:

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

主要目標是檢索所需的行,同時將其「時間」欄位更新為零。

巧妙的解決方案

解決方案涉及使用儲存的程式以達到預期的結果。預存程序封裝了一系列 SQL 語句,可以作為一個單元執行。

以下名為「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>

這會將符合條件的行的「時間」欄位更新為零,然後擷取並顯示這些更新的行。

優點

這種方法有幾個優點:

  • 將多個操作組合到一個呼叫中來避免不必要的網路往返。
  • 透過消除單獨查詢的需要來簡化程式碼結構。
  • 透過減少資料庫負載來提高效能。

以上是## 如何在不使用子查詢的情況下在單一操作中檢索和更新 MySQL 行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn