[英]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个解决方案:
在探索我的问题一段时间后,我来了解决方案。 以下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.