Ver Mensaje Individual
  #7 (permalink)  
Antiguo 15/05/2015, 17:47
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Actualizar datos desde una tabla resultado de JOIN

Cita:
Iniciado por iislas Ver Mensaje
Los TRIGGER's, fueron creados para guardar la integridad de los datos (DRI), no se recomienda su uso para la codificación de la lógica.

En cuanto a la estructura del FROM, bueno, hay mucha información en la red
Vaya chasco. Iba a publicar el trigger que había creado para mi ejemplo y resulta que no es esta la forma adecuada de hacerlo.
Bueno, no obstante reproduzco el ejemplo y el trigger que había hecho:

La tabla de personas:

Código SQL:
Ver original
  1. TABLE "public.personas"
  2.      COLUMN     |         TYPE          | Modifiers
  3. ----------------+-----------------------+-----------
  4.  id             | INTEGER               | NOT NULL
  5.  nombre_persona | CHARACTER VARYING(50) |
  6.  id_empresa     | INTEGER               | NOT NULL
  7. Indexes:
  8.     "personas_pkey" PRIMARY KEY, btree (id)
  9. Foreign-KEY constraints:
  10.     "personas_id_empresa_fkey" FOREIGN KEY (id_empresa) REFERENCES empresas(id)

La tabla de empresas:

Código SQL:
Ver original
  1. TABLE "public.empresas"
  2.      COLUMN     |         TYPE          | Modifiers
  3. ----------------+-----------------------+-----------
  4.  id             | INTEGER               | NOT NULL
  5.  nombre_empresa | CHARACTER VARYING(50) |
  6. Indexes:
  7.     "empresas_pkey" PRIMARY KEY, btree (id)
  8. Referenced BY:
  9.     TABLE "personas" CONSTRAINT "personas_id_empresa_fkey" FOREIGN KEY (id_empresa) REFERENCES empresas(id)

La tabla resultante del JOIN (ya viene referenciado el trigger):
Código SQL:
Ver original
  1. TABLE "public.ver"
  2.      COLUMN     |         TYPE          | Modifiers
  3. ----------------+-----------------------+-----------
  4.  nombre_persona | CHARACTER VARYING(50) |
  5.  nombre_empresa | CHARACTER VARYING(50) |
  6. Triggers:
  7.     act BEFORE UPDATE ON ver FOR EACH ROW EXECUTE PROCEDURE "MiTrigger"()

La función :
Código SQL:
Ver original
  1. SOURCE code         |
  2.                     | BEGIN                  
  3.                     | UPDATE empresas SET nombre_empresa=NEW.nombre_empresa WHERE nombre_empresa=OLD.nombre_empresa;
  4.                     | RETURN NEW;
  5.                     | END;

Y bueno, hasta aquí la cosa funciona. Si cambio un nombre de empresa en la tabla "ver", se cambia en "empresas". Si siguiera por este camino entiendo que debería de hacer otro trigger que actualizase en sentido contrario empresas->ver.

Pero parece que no es el método. Aún siendo pesado....¿cómo puedo interpretar la última parte de la sentencia que me pusiste?
O abusando del todo...como se adaptaría esa sentencias a mis tablas "persona", "empleado" y "ver".

Gracias y disculpa que sea tan pesado. :|
__________________
Mi calculadora en Qt