Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/11/2012, 10:02
Avatar de eaanillol
eaanillol
 
Fecha de Ingreso: septiembre-2010
Ubicación: Bogota - Colombia
Mensajes: 25
Antigüedad: 14 años, 2 meses
Puntos: 0
ORA-01779: cannot modify a column which maps to a non key-preserved table

Buenos días,
Jajajaja les tengo el siguiente reto:
Resulta que tengo en bd una inestabilidad en los datos. Tengo varios usuarios que pertenecen a una misma empresa, uno es principal y los otros secundarios, pero cada uno de ellos representan una empresa diferente, y son dueños de varios vehículos. Para saber de quién es cada vehículo se acude al idempresa en la tabla de vehículos. LO que me toca hacer es unificar los vehiculos de los usuarios secundarios a la empresa del usuario principal, es decir que los carros de los usuarios secundarios tengan el idempresa del usuario principal. Entonces leyendo en la web armé la siguiente consulta:

Código SQL:
Ver original
  1. UPDATE (SELECT ug.*,vn.idempresa,v2.company AS company2 FROM grupos g
  2. INNER JOIN usuariogrupo  ug ON ug.idgrupo = g.id/*Obtengo usuarios por grupo*/
  3. INNER JOIN visitor v ON v.visitorid = ug.idusuario/*obtengo la empresa */
  4. INNER JOIN empresa e ON e.id = v.company/*cruzo con empresa*/
  5. INNER JOIN vehiculonuevo vn ON vn.idempresa = v.company/*Cruzo con vehiculo nuevo para obtener los vehiculos por cada grupo*/
  6. INNER JOIN usuariogrupo ug2 ON ug.idgrupo = ug2.idgrupo AND ug2.conmicrositio = 'S'/*Obtengo los usuarios principales por grupo*/
  7. INNER JOIN visitor v2 ON v2.visitorid = ug2.idusuario /*Obtengo el company o idempresa del usuario principal*/
  8. )
  9. SET idempresa = company2
  10. ;
La tabla "usuariogrupo" agrupa a los usuarios por grupo y tambien contiene el idusario.
La tabla visitor contiene los usuarios y al campo company, que es el campo de empresa en esa tabla. Aqui el idusuario es el visitorid
Empresa: contiene las empresas.
vehiculonuevo contiene los vehiculos, ádemas contiene el campo idempresa.

Para identificar quien es el usuario principal la tabla usuariogrupo en el campo conmicrositio debe ser 'S'.

AL ejecutar sale el siguiente error: ORA-01779: cannot modify a column which maps to a non key-preserved table

Quedo atento...