mysql - 在mysql查询中重新输入别名列

标签 mysql sql column-alias

我正在尝试将旧表中的一些数据转换为新结构,其中我需要将单个键 ID 转换为复合键 ID,这给我带来了一些麻烦:

我的表格(简化):

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 吗?

最佳答案

好吧,你可以cast()作为signed:

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

关于mysql - 在mysql查询中重新输入别名列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54393292/

相关文章:

sql - PostgreSQL:在同一查询中使用计算列

mysql - 是否可以在 Dockerfile/Docker-Compose 中使用提交的容器镜像?

java - 尝试用java、jsp检查MySQL数据库

sql - 计算SQL中两个日期之间的完整月份数

PHP:数据库缓存(内存中有 sqlite)

mysql - 如何在 MySQL 中使用自动表别名生成查询结果?

PostgreSQL - 别名列和 HAVING

php - 无法将图像保存在 phpMyAdmin 数据库中,获取 [BLOB - 0 B]

php - 如何在 MySQL/PHP 中处理用户数据,用于大量用户和数据条目

php - 为什么我的 PHP 代码在运行时返回空白页?