2011-04-25 27 views
41

que tienen la siguiente estructura con una tabla de MySQL:MySQL combinar dos columnas y añadir en una nueva columna

+----------------+----------------+----------+ 
| zipcode  |  city  | state | 
+----------------+----------------+----------+ 
|  10954  |  Nanuet  | NY | 
+----------------+----------------+----------+ 

quiero combinar las 3 columnas anteriores en una sola columna de la siguiente manera:

+---------------------+ 
|  combined  | 
+---------------------+ 
| 10954 - Nanuet, NY | 
+---------------------+ 

Y quiero agregar esta columna "combinada" al final de la tabla sin destruir los 3 campos originales.

Respuesta

115

Crear la columna:

ALTER TABLE yourtable ADD COLUMN combined VARCHAR(50); 

actualización de los valores actuales:

UPDATE yourtable SET combined = CONCAT(zipcode, ' - ', city, ', ', state); 

actualización de todos los valores futuros de forma automática:

CREATE TRIGGER insert_trigger 
BEFORE INSERT ON yourtable 
FOR EACH ROW 
SET new.combined = CONCAT(new.zipcode, ' - ', new.city, ', ', new.state); 

CREATE TRIGGER update_trigger 
BEFORE UPDATE ON yourtable 
FOR EACH ROW 
SET new.combined = CONCAT(new.zipcode, ' - ', new.city, ', ', new.state); 
+15

+1 para los factores desencadenantes – MikeTheReader

+0

Cómo configuro dos campos en una actualización, intenté agregar otro conjunto de instrucciones new.rowname pero me acaba de dar un error. – LukeS

+0

Me voy de la memoria aquí, pero estoy bastante seguro de que puede separar los valores para establecer por comas como: establecer new.foo = 1, new.bar = 2 – squawknull

12

Añadir nueva columna a la tabla y perfrom la consulta:

UPDATE tbl SET combined = CONCAT(zipcode, ' - ', city, ', ', state) 
+0

Me gusta esta opción porque es el rendimiento sobre el almacenamiento. Para el almacenamiento sobre el rendimiento, puede agregar el concat a la consulta de selección. Ver la publicación de squaknull para el código de activación. – adorablepuppy

22

¿Seguro que quieres hacer esto? En esencia, está duplicando los datos que están en las tres columnas originales. A partir de ese momento, deberá asegurarse de que los datos en el campo combinado coincidan con los datos en las primeras tres columnas. Esto implica más sobrecarga para su aplicación, y otros procesos que actualicen el sistema necesitarán comprender la relación.

Si necesita los datos, ¿por qué no selecciona cuando lo necesita? El SQL para la selección de lo que sería en ese campo sería:

SELECT CONCAT(zipcode, ' - ', city, ', ', state) FROM Table; 

De esta manera, si los datos en los campos de cambios, que no tiene que actualizar su campo combinado.

+0

Estoy usando una función Autocompletar y quiero poder buscar Autocompletar con código postal y ciudad, esta parece ser la única manera fácil. Al menos, con mi nivel de conocimiento. – stewart715

+1

Haga su autocompletar como: ** SELECCIONE * de la tabla donde el código postal ME GUSTA '% q% OR ciudad LIKE'% q% o declare LIKE '% q% ** –

+0

Esto me parece el más limpio. Duplicar datos y luego verificar que están sincronizados e implementar lógica adicional para resolver problemas fuera de sincronización en un código de nivel superior parece mucho más sucio que simplemente concatenar con 'SELECT' o incluso mejor utilizando la aplicación para usarlo. No podría estar más de acuerdo con esta respuesta, aunque la respuesta de @ squawknull introdujo un concepto genial, cuando correspondía. – mrClean

0

SELECT CONCAT (código postal, '-', ciudad , ',', estado) COMO COMBINADO DE LA TABLA

Cuestiones relacionadas