insert在执行内部连接时使用in获取不同的值

pu82cl6c  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(369)

问题出现在将选定数据插入新表时。
这是我的疑问;

INSERT INTO `pdctarifahmgpo_x_mepo` (`idservicio_hm_x_mepo`, `cuenta_hm_x_mepo`, `dependencia_hm_x_mepo`,
        `fecha_hm_x_mepo`, `mes_hm_x_mepo`, `consumo_hm_x_mepo`, `costo_hm_x_mepo`)
(SELECT
a.servicio,
b.cuenta,
b.dependencia,
a.periodo_fin,
MONTHNAME(a.periodo_fin),
CONCAT('', (a.consumo)),
CONCAT('', (a.costo))
FROM `pdc_consumo_energia` a
INNER JOIN `pdc_servicios_energia` b ON a.servicio = b.id
WHERE a.servicio IS NOT NULL AND a.servicio <> ''
AND b.cuenta IS NOT NULL AND b.cuenta <> ''
AND b.dependencia IS NOT NULL AND b.dependencia <> ''
AND a.periodo_fin IS NOT NULL AND a.periodo_fin <> ''
AND a.consumo IS NOT NULL AND a.consumo <> ''
AND a.costo IS NOT NULL AND a.costo <> ''
AND a.servicio <> '192'
AND (YEAR(a.periodo_fin) >= 2011 AND YEAR(a.periodo_fin) <=YEAR(NOW()))
AND b.cuenta IN(..., 999941000123)
ORDER BY a.periodo_fin ASC, MONTHNAME(a.periodo_fin) ASC);

我自己执行了select,它显示了正确的数据,但是在执行insert时,它会在“cuenta\u hm\u x\u mepo”列中使用类似“999941000000”的零修改值,或者删除“-”和下一个数字,在这样的选定值中;和b.cuenta in(…,'4001370-01','5333427-01')。
下面是创建表的查询;

CREATE TABLE IF NOT EXISTS `pdctarifahmgpo_x_mepo` (`id` INT NOT NULL AUTO_INCREMENT,
            `idservicio_hm_x_mepo` VARCHAR(64) NOT NULL, `cuenta_hm_x_mepo` FLOAT NOT NULL,
            `dependencia_hm_x_mepo` VARCHAR(55) NOT NULL , `fecha_hm_x_mepo` VARCHAR(15) NOT NULL,
            `mes_hm_x_mepo` VARCHAR(15) NOT NULL, `consumo_hm_x_mepo` DECIMAL(30,2) NOT NULL,
            `costo_hm_x_mepo` DECIMAL(30,2) NOT NULL, PRIMARY KEY (`id`),
            UNIQUE KEY (`id`))  ENGINE = InnoDB;

可能是函数中的函数导致了这个问题?字段结构与原始表相似。尝试了一个值,结果是相同的。你知道为什么会这样吗?
使用选择的结果

使用插入的结果

shyt4zoc

shyt4zoc1#

你的 cuenta_hm_x_mepo FLOAT NOT NULL 列需要 cuenta_hm_x_mepo BIGINT NOT NULL 以便正确存储长整数。这个 FLOAT 数据类型不能提供足够的精度来存储12位整数。
如果您真的想以浮点格式存储值,也可以使用 DOUBLE 作为数据类型。 checkout 此页中的mysql数据类型。

相关问题