Вот объявление столбцов моей таблицы:

CREATE TABLE `my_table` (
`ID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`NAME` VARCHAR(30) DEFAULT NULL,
`POSITION` INT(11) DEFAULT NULL,
`STEP_ID` INT(10) UNSIGNED DEFAULT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `NAME` (`NAME`,`STEP_ID`)
) ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
;
Вот данные моей таблицы:
[img]https://i.sstatic.net /f991hW6t.png[/img]
Вот мой запрос:
SELECT `NAME`, 202000 - STEP_ID FROM my_table WHERE `Name` = 'aaa' ;
И вот что я получаю:
Код ошибки: 1690
Значение BIGINT UNSIGNED выходит за пределы диапазона '(202000 - моя_дб.my_table.STEP_ID)'
Это очень важно, я проверяю эту строку, помещая свои данные в строку за строкой и не выдавая ошибки:
SELECT `NAME`, 202000 - STEP_ID FROM my_table WHERE `Name` = 'aaa' ;
но при использовании имени поля выдает ошибку.
Что я пробовал, но не помогло:
SELECT `NAME`, 202000 - CAST(STEP_ID AS UNSIGNED) FROM my_table WHERE `Name` = 'aaa' ;
SELECT `NAME`, CAST(202000 AS UNSIGNED) - STEP_ID FROM my_table WHERE `Name` = 'aaa' ;
SELECT `NAME`, CAST(202000 AS UNSIGNED) - CAST(STEP_ID AS UNSIGNED) FROM my_table WHERE `Name` = 'aaa' ;
SELECT `NAME`, CAST((CAST(202000 AS UNSIGNED) - STEP_ID) AS UNSIGNED) FROM my_table WHERE `Name` = 'aaa' ;
SELECT `NAME`, CAST((CAST(202000 AS UNSIGNED) - CAST(STEP_ID AS UNSIGNED)) AS UNSIGNED) FROM my_table WHERE `Name` = 'aaa' ;
SELECT `NAME`, CAST(202000 - CAST(STEP_ID AS UNSIGNED)) AS UNSIGNED) FROM my_table WHERE `Name` = 'aaa' ;
Подробнее здесь: https://stackoverflow.com/questions/793 ... he-problem
Мобильная версия