Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Me tope con un problema en una base de datos postgresql, el cual era insertar datos en
una tabla pero dichos datos provienen de una consulta de otra tabla.
Esto se podría haber hecho con un script de ruby o en la consola, pero encontré
probando y buscando, una solución desde la terminal pgsql.
La sintaxis es la siguiente:
La primera parte es el típico INSERT de SQL, la sintaxis general cambia un poco pero
en escencia es lo mismo.
INSERT INTO table -> table es el nombre de la tabla en la cual queremos insertar los
datos resultado de una consulta.
despues del nombre de la tabla se colocan los campos en que deseamos caigan los datos
producto de la consulta, por ej. si en la tabla destino tenemos tres campos, id, nombre,
apellido, y queremos solo insertar nombre tendriamos una estructura similiar a:
INSERT INTO tabla (nombre)... vease que el nombre del campo va entre parentesis y se
pueden colocar varios campos seguidos por comas, por ej.
(nombre,apellido,edad...etc..)... hasta aqui no hay nada nuevo en un INSERT normal de
SQL.
debe conincidir con el numero de campos que estamos obteniendo del select, no es lo
mismo el numero de campos que el numero de registros, osease el numero de cmapos es
el numero de columnas que esperamos recibir no de filas o registros.
Practicamente con esto estariamos insertando todos los registros que devuelva la
consulta en los campos que seleccionamos en el INSERT.
Aqui estamos insertando solo los valores de dos columnas (nombre y apellido) pero a su
vez estamos insertando todos los nombres y apellidos que tengan country_id = 30.
Algo más...??
En caso que deseemos insertar tanto valores resultado de una consulta como algun valor
fijo que querramos, podemos colocarlo despues del a seleccion de campos, de le sig
forma
aqui el valor "comprado" no es un valor que se obtiene del select, es mas bien un valor
arbitrario que se estara insertando indicriminadamente con el valor que yo decida
colocar, otra forma de hacerlo para que se vea mas claro es la siguiente: