在执行 INNER JOIN 时使用 IN 插入获取不同的值
Insert getting different values using IN, while doing an INNER JOIN
问题出在 selected 数据插入新的 table 时。
这是我的查询;
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 时,它得到的值被修改为零,例如 '999941000000'
在 "cuenta_hm_x_mepo" 列或 删除 "-"-"-"-"-" 和下一个数字,在select像这样编辑值; AND b.cuenta IN(...,'4001370-01', , '5333427-01').
这是创建 table;
的查询
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;
可能是 IN 函数导致了这个问题?
字段结构类似于原来的table。尝试了一个单一的值,结果是一样的。知道为什么会这样吗?
结果使用 select
使用插入的结果
您的 cuenta_hm_x_mepo FLOAT NOT NULL
列需要 cuenta_hm_x_mepo BIGINT NOT NULL
才能正确存储长整数。 FLOAT
数据类型的准确性不足以存储 12 位整数。
如果您真的想以浮点格式存储值,您也可以使用 DOUBLE
作为数据类型。签出 this page for MySQL data types.
问题出在 selected 数据插入新的 table 时。
这是我的查询;
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 时,它得到的值被修改为零,例如 '999941000000' 在 "cuenta_hm_x_mepo" 列或 删除 "-"-"-"-"-" 和下一个数字,在select像这样编辑值; AND b.cuenta IN(...,'4001370-01', , '5333427-01').
这是创建 table;
的查询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;
可能是 IN 函数导致了这个问题? 字段结构类似于原来的table。尝试了一个单一的值,结果是一样的。知道为什么会这样吗?
结果使用 select
您的 cuenta_hm_x_mepo FLOAT NOT NULL
列需要 cuenta_hm_x_mepo BIGINT NOT NULL
才能正确存储长整数。 FLOAT
数据类型的准确性不足以存储 12 位整数。
如果您真的想以浮点格式存储值,您也可以使用 DOUBLE
作为数据类型。签出 this page for MySQL data types.