24/11/2010, 15:14
|
| | Fecha de Ingreso: mayo-2004 Ubicación: Santiago, Chile
Mensajes: 191
Antigüedad: 20 años, 7 meses 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. |