我在解决这个简单查询方面遇到了问题:
INSERT INTO stock
( articles_id, date, in, out )
VALUES
( 106, '2017-08-24', 0, 4 )
ON DUPLICATE KEY UPDATE out = IF( out - 4 >= 0, out - 4, 0 )
这是股票表的结构:
CREATE TABLE IF NOT EXISTS `stock` (
`articles_id` mediumint(8) unsigned NOT NULL,
`date` date NOT NULL,
`in` mediumint(8) unsigned NOT NULL COMMENT 'new units in date',
`out` mediumint(8) unsigned NOT NULL COMMENT 'no. of units sold in date'
PRIMARY KEY (`articles_id`,`date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
查询记录已存在,并具有以下值:
运行查询后, out 的值为 16777215 ,我猜是因为此字段是 unsigned (我想要它)那样的话,如果我减去比原始值更大的值,它就从它的最大值开始向下计数。
但是,我的 IF 语句不应该阻止这种行为吗?
答案 0 :(得分:2)
您需要使用传入值,因此请使用values()
:
INSERT INTO stock( articles_id, date, in, out )
VALUES ( 106, '2017-08-24', 0, 4 )
ON DUPLICATE KEY UPDATE out = (CASE WHEN VALUES(out) - 4 >= 0
THEN VALUES(out) - 4
ELSE 0
END);