Вставка получения различных значений с помощью IN, в то время как INNER JOIN - PullRequest
0 голосов
/ 04 сентября 2018

Проблема в том, что выбранные данные вставляются в новую таблицу.

Вот мой запрос;

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" COLUMN или удаляет "-" и следующие числа в выбранных значениях, подобных этому; И 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;

Может быть, эта проблема вызвана функцией IN ? Структура поля аналогична исходной таблице. Пробовал одно значение и результат тот же. Есть идеи, почему это получается?

Результаты с использованием выбора enter image description here Результаты с использованием вставки enter image description here

1 Ответ

0 голосов
/ 04 сентября 2018

Ваш столбец cuenta_hm_x_mepo FLOAT NOT NULL должен быть cuenta_hm_x_mepo BIGINT NOT NULL, чтобы правильно хранить длинное целое число. Тип данных FLOAT не обеспечивает достаточной точности для хранения 12-значного целого числа.

Если вы действительно хотите сохранить значение в формате с плавающей запятой, вы также можете использовать DOUBLE в качестве типа данных. Оформить заказ на этой странице для типов данных MySQL .

...