使用子查询条件更新mysql数据库

时间:2012-03-05 01:56:54

标签: mysql sql

我想写一个SQL语法,将当前事务放在组中。此交易必须在最后60秒内完成。 将当前事务与其他现有事务分组是通过分配从最后一分钟内执行的其他事务中复制的组ID号(GRID)来完成的。

换句话说: 购买已完成,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();

然而,这总是返回更新行的数量,即使存在的行只是要更新的行,或者找到的另一行还没有分配组号。这很明显,因为它更新了子查询中的任何值。如果找不到任何内容,它将以空值更新。 我感兴趣的解决方案有两个:

  1. 如果找到(来自子查询)值基本为空,我希望此脚本停止执行更新(按条件)。 或
  2. 我想插入条件,如果子查询返回空值,则会插入修复的字符串。

1 个答案:

答案 0 :(得分:0)

经过一段时间探索我的问题后,我找到了解决方案。 以下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();