Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta con dos relaciones a la misma tabla (https://www.clubdelphi.com/foros/showthread.php?t=31813)

mcrz2 18-05-2006 17:27:44

Consulta con dos relaciones a la misma tabla
 
Hola a todos,

Tengo una tabla en la que guardo un listado de proyectos. Cada proyecto está relacionado con dos empresas (las empresas las almaceno en una tabla al efecto), cuyos códigos guardo en sendos campos de la tabla de proyectos. Mi problema surge al generar una consulta para obtener un proyecto y los nombres de ambas empresas a través de sus códigos. Lo único que he conseguido con las consultas son dos filas en las que me aparece el mismo proyecto una con el nombre de una empresa y otro con la segunda. ¿Cómo puedo conseguir una consulta en la que me aparezca una sola fila por proyecto con los nombres de ambas empresas?

Garcias por adelantado. Un cordial saludo.

Neftali [Germán.Estévez] 18-05-2006 17:43:00

¿Puedes poner la consulta que estás utilizando actualmente?
Será más fácil entender el problema y darte una solución (que pasa por usar dos Alias distintos para la misma tabla), pero será más fácil sobre tu ejemplo.

ContraVeneno 18-05-2006 18:57:52

edito: esto es un ejemplo de lo que menciona Neftali (que me paso desapercibido cuando lo leí)
Código SQL [-]
select ....
from Tabla T, Empresas E1, Empresas E2
where ClaveEMpresa1 = E1.Clave
and ClaveEmpresa2= E2.Clave


espero que eso te de una idea

mcrz2 23-05-2006 12:26:09

Gracias por la respuesta.

Voy a tratar de resumir brevemente lo que tengo
La estructura básica de mis tablas son:

TABLA PROYECTOS

ProCodigo int;
ProNobre varchar;
ProEmp1 int;
ProEmp2 int;

TABLA EMPRESAS

EmpCodigo int;
EmpNombre varchar;

Como comenté anteriormente, en los campos ProEmp1 y ProEmp2 de la tabla de proyectos guardo las referencias a los códigos de dos empresas diferentes ambas almacenadas en la tabla EMPRESAS

Mis "cortos" conocimientos de SQL me llevan hasta uno de los dos siguientes casos:

Caso 1

Código SQL [-]
select PROYECTOS.ProCodigo, EMPRESAS.EmpNombre
from PROYECTOS, EMPRESAS
where ((PROYECTOS.ProEmp1=EMPRESAS.EmpCodigo) AND
 (PROYECTOS.ProEmp2=EMPRESAS.EmpCodigo))

Caso 2

Código SQL [-]
select PROYECTOS.ProCodigo, EMPRESAS.EmpNombre
from PROYECTOS, EMPRESAS
where ((PROYECTOS.ProEmp1=EMPRESAS.EmpCodigo) OR
 (PROYECTOS.ProEmp2=EMPRESAS.EmpCodigo))

El caso uno no devuelve filas. El caso 2 devuelve dos filas por Proyecto.
Lo que necesito sería obtener un resultado como el siguiente


Fila 1: Proyecto1, Nombre Empresa1 del Proyecto 1, Nombre Empresa2 del Proyecto 1

Fila 2: Proyecto2, Nombre Empresa1 del Proyecto 2, Nombre Empresa2 del Proyecto 2
.
.
.

Fila N: ProyectoN, Nombre Empresa1 del Proyecto N, Nombre Empresa2 del Proyecto N.

Espero haber aclarado mi problema.

Un cordial saludo

Neftali [Germán.Estévez] 23-05-2006 13:15:25

Se trata de usar Alias con la tabla de empresa; Algo así:

Código SQL [-]
SELECT PROYECTOS.ProCodigo, EMPRESAS.EmpNombre, EMPRESAS_1.EmpNombre
FROM 
(PROYECTOS INNER JOIN EMPRESAS 
ON PROYECTOS.ProEmp1 = EMPRESAS.EmpCodigo) 
INNER JOIN EMPRESAS AS EMPRESAS_1 
ON PROYECTOS.ProEmp2 = EMPRESAS_1.EmpCodigo
WHERE (PROYECTOS.ProCodigo=1)


La franja horaria es GMT +2. Ahora son las 23:53:29.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi