Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Enlazar más de un campo con una única tabla (https://www.clubdelphi.com/foros/showthread.php?t=40325)

Jose_Pérez 13-02-2007 16:38:02

Enlazar más de un campo con una única tabla
 
Hola:

Tengo una tabla de obras con tres campos numéricos diferentes que enlazan con la misma tabla de directores. Cada campo se utilizar para almacenar el director que haya dirigido el proyecto de la obra tres fases diferentes. Puede darse la circunstancia de que un mismo director haya dirigido más de una de las fase la obra.

Si quisiera consultar el nombre de los directores de la primera fase, la consulta sería así:

Código SQL [-]
Select Obra.Concepto,Director.Nombre from Obra,Director
Where Obra.Director1=Director.Codigo

Ahora bien, mi duda aparece cuando quiero consultar el nombre de los directores que hayan intervenido en las tres fases

Algo así como esto...
Código SQL [-]
Select Obra.Concepto,Director.Nombre from Obra,Director
Where Obra.Director1=Director.Codigo 
and Obra.Direcor2=Director.Codigo
and Obra.Director3=Director.Codigo

¿Cuál seríala forma correcta de hacerlo?

Gracias.

Crandel 13-02-2007 17:00:41

Deberia ser algo asi:

Código SQL [-]
Select Obra.Concepto, 
       (Select Director.Nombre from Director Where Obra.Director1=Director.Codigo) Director1, 
       (Select Director.Nombre from Director Where Obra.Director2=Director.Codigo) Director2,
       (Select Director.Nombre from Director Where Obra.Director3=Director.Codigo) Director3
from Obra

ContraVeneno 13-02-2007 17:49:06

Código SQL [-]
Select O.Concepto, D1.Nombre, D2.NOmbre, D3.Nombre
From Obra O
join Director D1 on O.Director1=D1.COdigo
join Director D2 on O.Director2=D2.Codigo
join Director D3 on O.Director3=D3.Codigo

Crandel 13-02-2007 18:11:22

tambien podria ser algo asi:

Código SQL [-]
select Concepto, D1.Nombre, D2.Nombre, D3.Nombre
from Obra, Director D1, Director D2, Director D3
where D1.Codigo = Director1
   and D2.Codigo = Director2
   and D3.Codigo = Director3

ContraVeneno 13-02-2007 18:35:00

Así es, tambien es equivalente...

El problema en esos casos, es cuando supongamos que el valor de Director3 es Null y al no haber ninguna conincidencia, no te regresaría ningún resultado. En cambio, utilizando un join, puedes utilizar la opción "left outer join" y esto te regresará las obras sin importar si falta algún dato de alguno de los directores...

Habría que ver como esta diseñada la base de datos y demas menesteres, pero por esa situación que te comento, yo prefiero utilizar joins.

:rolleyes:

Jose_Pérez 15-02-2007 10:28:47

Muchas gracias por vuestras respuestas.

Ahora mismo estoy con otra tarea, pero lo probaré en cuanto pueda.

Saludos.


La franja horaria es GMT +2. Ahora son las 05:47:48.

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