mysql - used - load data local infile into table
mysql cargar datos infile donde la cláusula (2)
Necesito actualizar las filas existentes en la tabla con el archivo de datos de carga basado en alguna condición, ¿es esto posible?
load data infile ''E:/xxx.csv'' into table tld_tod @aaa, @xxx_date, @ccc fields terminated by '','' LINES TERMINATED BY ''/r/n'' set xxx = str_to_date(@xxx_date, ''%d-%b-%y'') where xxx is not null and aaa=@aaa
En MySQL es posible crear disparadores antes de actualizar. Así que en este caso sugiero utilizar:
delimiter //
CREATE TRIGGER upd_check BEFORE UPDATE ON table
FOR EACH ROW
BEGIN
IF NEW.xxx IS NOT NULL THEN
SET NEW.xxx = 0;
END IF;
END;//
delimiter ;
Después de crear el activador, puede ejecutar el archivo de datos de carga sin DÓNDE. No estoy seguro de cuál es su condición específica requerida, pero hágalo dentro de BEGIN y END.
También puede crear una tabla de etapas, insertar los datos del archivo CSV en la tabla de etapas y, finalmente, insertar los datos en su tabla de destino con las operaciones y el filtrado necesarios.
CREATE TEMPORARY TABLE staging LIKE tld_tod;
LOAD DATA INFILE ''E:/xxx.csv''
INTO TABLE staging
FIELDS TERMINATED BY '',''
LINES TERMINATED BY ''/r/n'';
INSERT INTO tld_tod
SELECT STR_TO_DATE(col_date, ''%d-%b-%y'') AS date
WHERE col_date IS NOT NULL;