Di que tengo una selección
SELECT DISTINCT id, customer_id, domain FROM config WHERE type = 'foo';
que devuelve algunos registros.
¿Cómo puedo hacer una inserción para la fila de alcance en el conjunto de resultados como
INSERT INTO config (id, customer_id, domain) VALUES (@id, @customer_id, 'www.example.com');
¿Dónde @id
y @customer_id
están los campos de la fila en el conjunto de resultados?
editar: no quería simplemente duplicarlo, sino insertar un nuevo valor en el campo domain
. Sin embargo, una situación de facepalm, ya que es muy fácil ;-) ¡Gracias!
Respuestas:
Tan simple como esto:
INSERT INTO config (id, customer_id, domain) SELECT DISTINCT id, customer_id, domain FROM config;
Si desea "
www.example.com
" como dominio, puede hacer:INSERT INTO config (id, customer_id, domain) SELECT DISTINCT id, customer_id, 'www.example.com' FROM config;
fuente
domain
establecido en 'www.example.com', simplemente duplica todas las entradas.INSERT INTO config (id, customer_id, domain) SELECT id, customer_id, 'www.example.com' FROM ( SELECT DISTINCT id, customer_id, domain FROM config WHERE type = 'foo' ) x;
fuente
INSERT INTO Config (id, customer_id, domain) SELECT DISTINCT id, customer_id, 'www.example.com' FROM config
La documentación de MySQL para esta sintaxis está aquí:
http://dev.mysql.com/doc/refman/5.1/en/insert-select.html
fuente
EDITAR - Después de leer el comentario sobre la respuesta de @ Krtek.
Supongo que está solicitando una actualización en lugar de insertar:
update config set domain = 'www.example.com'
Esto actualizará todos los registros existentes en la tabla de configuración con el dominio como 'www.example.com' sin crear entradas duplicadas.
ANTIGUA RESPUESTA -
puedes usar algo como -
INSERT INTO config (id, customer_id, domain) select id, customer_id, domain FROM config
Nota: - Esto no funcionará si tiene una identificación como clave principal
fuente
Ejecute esta declaración SQL:
-- Do nothing.
Desea seleccionar filas distintas de "config" e insertar esas mismas filas en la misma tabla. Ya están ahí. Nada que hacer.
A menos que en realidad solo desee actualizar algunos o todos los valores de la columna "dominio". Eso requeriría una declaración UPDATE que realmente hizo algo.
fuente