Ver Mensaje Individual
  #8 (permalink)  
Antiguo 24/11/2010, 15:14
Punchi
 
Fecha de Ingreso: mayo-2004
Ubicación: Santiago, Chile
Mensajes: 191
Antigüedad: 20 años
Puntos: 1
Respuesta: Consulta con varias foraneas de una misma tabla

Gracias gnzsoloyo,

Disculpa por no seguir seguido con el tema, empecé a ver otras cosas y he vuelto con este problema. En la base de datos física cada "ID_empresa" es reemplazado por el tipo de empresa, la base de datos final queda:



Código:
/*==============================================================*/
/* Table: EMPRESA                                               */
/*==============================================================*/
create table EMPRESA
(
   ID_EMPRESA           varchar(11) not null,
   RAZON_SOCIAL         varchar(512),
   primary key (ID_EMPRESA)
);

/*==============================================================*/
/* Table: USUARIO                                               */
/*==============================================================*/
create table USUARIO
(
   ID_USUARIO           int not null auto_increment,
   ID_EMPRESA1          varchar(11),
   ID_EMPRESA2          varchar(11),
   ID_EMPRESA3          varchar(11),
   NOMBRE               varchar(1024),
   primary key (ID_USUARIO)
);

alter table USUARIO add constraint FK_DATO1 foreign key (ID_EMPRESA1)
      references EMPRESA (ID_EMPRESA) on delete restrict on update restrict;

alter table USUARIO add constraint FK_DATO2 foreign key (ID_EMPRESA2)
      references EMPRESA (ID_EMPRESA) on delete restrict on update restrict;

alter table USUARIO add constraint FK_DATO3 foreign key (ID_EMPRESA3)
      references EMPRESA (ID_EMPRESA) on delete restrict on update restrict;
Creando algunos datos...

Código:
INSERT INTO `empresa` (`ID_EMPRESA`, `RAZON_SOCIAL`) VALUES
('1111111111', 'empresa numero uno'),
('2222222222', 'empresa numero dos'),
('3333333333', 'empresa numero tres'),
('444444444', 'empresa numero cuatro');

INSERT INTO `usuario` (`ID_USUARIO`, `ID_EMPRESA1`, `ID_EMPRESA2`, `ID_EMPRESA3`, `NOMBRE`) VALUES
(123, '1111111111', '2222222222', '3333333333', 'usuario unodostres'),
(456, '444444444', '2222222222', '1111111111', 'otrousuario');
Acomodando el código, quedaría:

Código:
SELECT *
FROM
  usuario U
  LEFT JOIN
  empresa E1 ON u.ID_EMPRESA1 = E1.ID_EMPRESA
  LEFT JOIN
  empresa E2 ON u.ID_EMPRESA2 = E2.ID_EMPRESA
  LEFT JOIN
  empresa E3 ON u.ID_EMPRESA3 = E3.ID_EMPRESA;
El que efectivamente arroja la RAZON_SOCIAL

Acomodamos un poco...

Código:
SELECT E1.RAZON_SOCIAL as DATO1, E2.RAZON_SOCIAL as DATO2
FROM
  usuario U
  LEFT JOIN
  empresa E1 ON u.ID_EMPRESA1 = E1.ID_EMPRESA
  LEFT JOIN
  empresa E2 ON u.ID_EMPRESA2 = E2.ID_EMPRESA
  LEFT JOIN
  empresa E3 ON u.ID_EMPRESA3 = E3.ID_EMPRESA;
Y listo!!!

Gracias! Les dejo la info a los demas, por si les sirve.