Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Agregar datos en una tabla a partir de otras tablas

Estas en el tema de Agregar datos en una tabla a partir de otras tablas en el foro de PostgreSQL en Foros del Web. Tengo esta duda y quisiera resolverla lo más pronto posible, pero no sé cómo preguntarlo a Google. Tengo una serie de tablas hechas en PostgreSQL, ...
  #1 (permalink)  
Antiguo 11/07/2013, 08:42
Avatar de kana_kanji2000  
Fecha de Ingreso: mayo-2013
Ubicación: Caracas
Mensajes: 15
Antigüedad: 8 años, 2 meses
Puntos: 0
Pregunta Agregar datos en una tabla a partir de otras tablas

Tengo esta duda y quisiera resolverla lo más pronto posible, pero no sé cómo preguntarlo a Google. Tengo una serie de tablas hechas en PostgreSQL, y quiero pasar los datos de 3 tablas a una que las une. Me explico: el registro hecho en PHP guarda datos personales como:
Código SQL:
Ver original
  1. CREATE TABLE persona
  2. (
  3.   idpersona serial NOT NULL,
  4.   ...
  5.   nombres CHARACTER VARYING(50) NOT NULL DEFAULT 's/n'::CHARACTER VARYING,
  6.   apellidos CHARACTER VARYING(50) NOT NULL DEFAULT 's/a'::CHARACTER VARYING,
  7.   cedula INTEGER NOT NULL DEFAULT 0,
  8.   genero CHARACTER VARYING(3) NOT NULL DEFAULT 's/g'::CHARACTER VARYING,
  9.   telefono CHARACTER VARYING(14) NOT NULL DEFAULT 's/t'::CHARACTER VARYING,
  10.   telfemergencia CHARACTER VARYING(14) DEFAULT 's/t'::CHARACTER VARYING,
  11.   correoelectronico CHARACTER VARYING(50) DEFAULT 's/c'::CHARACTER VARYING,
  12.   ...
  13. )

otra guarda datos militares como el componente, grado, categoría y especialidad (saltar esto), otra guarda información sobre la resolución:
Código SQL:
Ver original
  1. CREATE TABLE resolucion
  2. (
  3.   idresolucion serial NOT NULL,
  4.   nrofecharesolucion text DEFAULT 'sin resolucion'::text,
  5.   CONSTRAINT pkresolucion PRIMARY KEY (idresolucion)
  6. )

otra guarda datos como el estudio realizado:
Código SQL:
Ver original
  1. CREATE TABLE nucleo
  2. (
  3.   idnucleo serial NOT NULL,
  4.   nucleo CHARACTER VARYING(40),
  5.   CONSTRAINT pknucleo PRIMARY KEY (idnucleo)
  6. )
y
Código SQL:
Ver original
  1. CREATE TABLE carrera
  2. (
  3.   idcarrera serial NOT NULL,
  4.   carrera CHARACTER VARYING(50),
  5.   CONSTRAINT pkcarrera PRIMARY KEY (idcarrera)
  6. )

Los datos de carrera se guardan exitosamente en
Código SQL:
Ver original
  1. CREATE TABLE estudio
  2. (
  3.   idestudio serial NOT NULL,
  4.   periodo CHARACTER VARYING(40) DEFAULT 'no estudia'::CHARACTER VARYING,
  5.   idnucleo INTEGER NOT NULL,
  6.   idcarrera INTEGER NOT NULL,
  7.   CONSTRAINT pkestudio PRIMARY KEY (idestudio),
  8.   CONSTRAINT fkestudiocarrera FOREIGN KEY (idcarrera)
  9.       REFERENCES carrera (idcarrera) MATCH SIMPLE
  10.       ON UPDATE NO ACTION ON DELETE NO ACTION,
  11.   CONSTRAINT fkestudionucleo FOREIGN KEY (idnucleo)
  12.       REFERENCES nucleo (idnucleo) MATCH SIMPLE
  13.       ON UPDATE NO ACTION ON DELETE NO ACTION
  14. )

Pero quiero guardar los datos de idpersona, idresolucion e idestudio en otra tabla ya creada:
Código SQL:
Ver original
  1. CREATE TABLE estudiouniversitario
  2. (
  3.   idestudiopersona serial NOT NULL,
  4.   idpersona INTEGER,
  5.   idresolucion INTEGER NOT NULL,
  6.   idestudio INTEGER NOT NULL,
  7.   CONSTRAINT pkestudiopersona PRIMARY KEY (idestudiopersona),
  8.   CONSTRAINT fkestudioresolucion FOREIGN KEY (idresolucion)
  9.       REFERENCES resolucion (idresolucion) MATCH SIMPLE
  10.       ON UPDATE NO ACTION ON DELETE NO ACTION,
  11.   CONSTRAINT fkuniversitario FOREIGN KEY (idestudio)
  12.       REFERENCES estudio (idestudio) MATCH SIMPLE
  13.       ON UPDATE NO ACTION ON DELETE NO ACTION
  14. )

Para luego poder hacer una consulta tipo:
Código SQL:
Ver original
  1. SELECT estudiouniversitario.idestudiopersona, persona.idpersona, resolucion.nrofecharesolucion, nucleo.nucleo, carrera.carrera, estudio.periodo
  2. FROM estudiouniversitario, persona, resolucion, nucleo, carrera, estudio
  3. WHERE estudiouniversitario.idpersona = persona.idpersona
  4. AND estudio.idnucleo = nucleo.idnucleo
  5. AND estudio.idcarrera = carrera.idcarrera
  6. ;

Aún no sé qué genera esto, porque, los campos están vacíos Estoy que me doy golpes contra la pared... ¿Hay alguna web donde salga esta solución o quizás alguna alma caritativa que me ayude?
  #2 (permalink)  
Antiguo 11/07/2013, 09:26
Avatar de ichigohollow  
Fecha de Ingreso: octubre-2009
Mensajes: 38
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Agregar datos en una tabla a partir de otras tablas

la tabla estudiouniversitario esta vacía? si esta vacía es obvio que el ultimo select no traerá nada. para insertar en una tabla a partir de una consulta seria con una sentencia tipo

INSERT INTO tabla2 SELECT campo1,campo2,... FROM tabla1,.....;

asegurándote que las columnas del select coincidan con los campos que requieres en la tabla donde se harán las inserciones.

en tu caso como la tabla estudiouniversitario tiene un campo serial te recomiendo que en la sentencia del insert coloques exactamente los campos que vas a colocar datos (es decir omitiendo el que es de tipo serial, para que el sequence se mueva con los registros y así no se atrase y te de problemas en el futuro por duplicidad del indice/clave primaria) y luego en el select ordenar las columnas según como colocaste los campos anteriores.
  #3 (permalink)  
Antiguo 11/07/2013, 11:47
Avatar de kana_kanji2000  
Fecha de Ingreso: mayo-2013
Ubicación: Caracas
Mensajes: 15
Antigüedad: 8 años, 2 meses
Puntos: 0
Busqueda Respuesta: Agregar datos en una tabla a partir de otras tablas

Cita:
Iniciado por ichigohollow Ver Mensaje
la tabla estudiouniversitario esta vacía? si esta vacía es obvio que el ultimo select no traerá nada.
Así es, la tabla está vacía, al menos por ahora.
Cita:
para insertar en una tabla a partir de una consulta seria con una sentencia tipo

INSERT INTO tabla2 SELECT campo1,campo2,... FROM tabla1,.....;

asegurándote que las columnas del select coincidan con los campos que requieres en la tabla donde se harán las inserciones.

en tu caso como la tabla estudiouniversitario tiene un campo serial te recomiendo que en la sentencia del insert coloques exactamente los campos que vas a colocar datos (es decir omitiendo el que es de tipo serial, para que el sequence se mueva con los registros y así no se atrase y te de problemas en el futuro por duplicidad del indice/clave primaria) y luego en el select ordenar las columnas según como colocaste los campos anteriores.
Sería
Código SQL:
Ver original
  1. INSERT INTO estudiouniversitario (idpersona, idresolucion, idestudio) VALUES
y justo acá se deben insertar los valores requeridos: idpersona de la tabla: integer siendo idpersona de persona serial;
idresolucion de la tabla: integer siendo idresolucion de resolucion serial;
idestudio de la tabla: integer siendo idestudio de estudio serial;

Última edición por kana_kanji2000; 11/07/2013 a las 12:28 Razón: reemplazo la palabra 'leer' por 'insertar', cambio 'debe' por 'deben'
  #4 (permalink)  
Antiguo 11/07/2013, 12:47
Avatar de ichigohollow  
Fecha de Ingreso: octubre-2009
Mensajes: 38
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Agregar datos en una tabla a partir de otras tablas

Cita:
Iniciado por kana_kanji2000 Ver Mensaje
Así es, la tabla está vacía, al menos por ahora.

Sería
Código SQL:
Ver original
  1. INSERT INTO estudiouniversitario (idpersona, idresolucion, idestudio) VALUES
y justo acá se deben insertar los valores requeridos: idpersona de la tabla: integer siendo idpersona de persona serial;
idresolucion de la tabla: integer siendo idresolucion de resolucion serial;
idestudio de la tabla: integer siendo idestudio de estudio serial;
la palabra "values" no va, allí va el select que te devuelve lo valores de las otras tablas que deseas insertar en estudiouniversitario.

pero ahora que leí mejor tu caso me doy cuenta que la tablas que quieres llenar no es una tabla que lo puedas hacer con un select, dado que las otras tablas no están relacionadas entre ellas, la tabla estudiouniversitario sera la tabla relacional de las otras tablas. por ende ella se tiene que ir llenando de manera simultanea a medida que se registran en la otras tablas.

Etiquetas: php, php+base+de+datos, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:36.