繁体   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