簡體   English   中英

使用子查詢條件更新mysql數據庫

[英]Update mysql database with subquery condition

我想寫1 SQL語法,將當前事務放在組中。 此交易必須在最近60秒內完成。 通過分配組ID號(GRID)可以完成當前事務與其他現有事務的分組,該組ID號也從最近一次執行的其他事務復制而來。

換句話說:購買已完成,SQL腳本將查找在最后一分鍾內完成的其他購買,如果找到,它將從找到的行中獲取組號並分配給當前購買,因此在這種情況下,一分鍾內進行的每次購買都會在一個小組中找到自己。

這是我撰寫的以下更新聲明

UPDATE TRANSACTIONS
 SET GRID=(SELECT G FROM
         (SELECT GRID AS G 
          FROM TRANSACTIONS
          WHERE CUST_ID='123ID'
          AND STAMP+60>UNIX_TIMESTAMP()
          LIMIT 1) 
      AS t), 
STAMP=UNIX_TIMESTAMP()
WHERE CUST_ID='123ID' 
AND STAMP+60>UNIX_TIMESTAMP();

但是,即使存在的行僅是要更新的行,或者找到的另一行尚未分配組號,這總是返回更新的行數。 這很明顯,因為它會使用在子查詢中找到的任何值進行更新。 如果未找到,它將更新為空值。 我感興趣的有2個解決方案:

  1. 如果從子查詢中發現值基本上為空,我希望此腳本停止執行更新(按條件)。 要么
  2. 我想插入條件,如果子查詢返回空值,則將插入固定的字符字符串。

在探索我的問題一段時間后,我來了解決方案。 以下MySQL語法符合我的要求。

請注意非常有趣的MySQL函數IFNULL()。 可以很方便!

UPDATE TRANSACTIONS
SET GRID=(SELECT G FROM
        (SELECT IFNULL(GRID, 'NO ID') AS G 
         FROM TRANSACTIONS
         WHERE CUST_ID='123ID'
         AND STAMP+60>UNIX_TIMESTAMP()
         LIMIT 1) 
    AS t), 
STAMP=UNIX_TIMESTAMP()
WHERE CUST_ID='123ID' 
AND STAMP+60>UNIX_TIMESTAMP();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM