2017-08-24 33 views
0

我有問題,使這個簡單的查詢工作:未簽名的現場更新到最大值

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; 

查詢到的記錄已經存在,並且具有下列值:

  1. articles_id:106
  2. 日期:2017年8月2日4
  3. 在:0
  4. 出:2運行查詢

後,具有的值,這是我想是因爲此字段是無符號(我想這樣),如果我減去比原來更大的值,它會從最大值開始倒數。

但是,應該不是我的如果語句阻止該行爲?

回答

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); 
+1

所以我猜(出 - 4)不考慮它的價值,但它的經營的領域本身,從而得到這個值:16777215,因爲它大於0,它進入第一個條件並最終進行減法。 – user3514092