Повторное определение столбца псевдонимов в запросе MySQL - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь преобразовать некоторые данные из старых таблиц в новую структуру, где мне нужно преобразовать один идентификатор ключа в составной, и это доставляет мне некоторые проблемы:

Моя таблица (упрощенно):

CREATE TABLE `tmplt_spoergsmaal` (
  `SpID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `lbnr` int(10) unsigned DEFAULT NULL,
  `SpTekst` text,
  `SpTitel` varchar(100) NOT NULL DEFAULT '',
  `fk_Naeste_Sp` int(10) unsigned DEFAULT NULL,
  `kontrol` tinyint(3) unsigned NOT NULL DEFAULT 0,
  `kontrol_kilde` int(10) unsigned NOT NULL DEFAULT 0,
  FOREIGN KEY (kontrol_kilde) 
    REFERENCES tmplt_spoergsmaal(SpID)
    ON DELETE ignore
)

Пример данных:

Обратите внимание, что SPID является последовательным

+--------+--------+-----------+-----------+------------+-----------------+
|  SpID  |  lbnr  |  SpTekst  |  SpTitel  |   kontrol  |  kontrol_kilde  | 
+--------+--------+-----------+-----------+------------+-----------------+
|  9000  |  100   | blablabla | title1    |      0     |     null        |
+--------+--------+-----------+-----------+------------+-----------------+
|  9001  |  101   | blablabla | title2    |      0     |     null        |
+--------+--------+-----------+-----------+------------+-----------------+
|  9002  |  102   | blablabla | title3    |      0     |     null        |
+--------+--------+-----------+-----------+------------+-----------------+
|  9003  |  103   | blablabla | title4    |      1     |       9000      |
+--------+--------+-----------+-----------+------------+-----------------+
|  9004  |  104   | blablabla | title5    |      1     |       9001      |
+--------+--------+-----------+-----------+------------+-----------------+

Я изменяю базу данных и использую lbnr столбец вместо kontrol_kilde столбца.Мой предварительный запрос таков:

SELECT spid, lbnr, kontrol, kontrol_kilde, (lbnr- (spid - kontrol_kilde)* kontrol)* kontrol AS k
FROM tmplt_spoergsmaal;

Это решает мою проблему, но однажды возникла проблема (из-за изменения вычитания (spid - kontrol_kilde стало kontrol_kilde - spid), которое сделало частьуравнение отрицательное. Поскольку столбец не подписан, это вызвало ошибку:

Error Code: 1690. BIGINT UNSIGNED value is out of range in

Мой вопрос:

Могу ли я "разыграть"столбцы в столбце псевдонимов k, так что это int вместо unsigned int?

1 Ответ

0 голосов
/ 28 января 2019

Ну, вы можете cast() как signed:

SELECT spid, lbnr, kontrol, kontrol_kilde,
       cast(lbnr - (spid - kontrol_kilde) * kontrol)* kontrol as signed) AS k
FROM tmplt_spoergsmaal;
...