Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   No me sale esta consulta ¿Por que? (https://www.clubdelphi.com/foros/showthread.php?t=63158)

rgstuamigo 31-01-2009 17:22:26

No me sale esta consulta ¿Por que?
 
Hola amigos, tengo la siguiente tabla:
Código SQL [-]
Create table Obras(#Obra = proyecto
Nro_Ob  int unsigned auto_increment not null primary key,
Nombre_Obra  varchar(80),
Cliente int unsigned,
Fecha_Contrato date,
Precio float,
Moneda int unsigned,
Fecha_I date,
Plazo varchar(20),
Lugar  varchar(60),
Encargado int unsigned,
Firmado_Parte_Contraria varchar(50),#Nombre del cliente  o representante que firmo el contrato
Firmado_Por int unsigned,#empleado que aprobo o dio el visto bueno
Estado varchar(1),# A=Activo,T=Terminado,etc.
Descripcion varchar(100),
foreign key(Moneda)references Moneda(Cod_mo)on update cascade,
foreign key(Firmado_Por)references Empleado(ci)on delete set null on update cascade,
foreign key(Encargado)references Empleado(ci)on delete set null on update cascade,
foreign key(Cliente)references Cliente(Cod_Cli)on delete set null on update cascade
)engine=innodb;
aqui la tabla empleado//he puesto solo los campos de interes
Código SQL [-]
create table Empleado(
ci int unsigned not null primary key,
nombre varchar(30)
)engine=innodb;
Aqui la tabla Moneda
Código SQL [-]
create table Moneda(
Cod_Mo int unsigned not null primary key,
Sigla varchar(5)
)engine=innodb;
aqui la tabla la tabla cliente
Código SQL [-]
create table Cliente(
Cod_Cli int unsigned auto_increment not null primary key,
Razon_Social varchar(30)
)engine=innodb;
Bueno de algunas tabla como les dije solo he puesto los campos de interes ;).
Bueno.... resulta que quiero seleccionar todos los registros de la tabla obras de manera que los campos que son foraneos(Foreign key) en ves de mostrarme el codigo o nro correspondiente me muestre mas bien el nombre que corresponde ese codigo, es decir en el caso del cliente que me muestre la Razon_Social y no el Cod_Cli, en el caso de Moneda me muestre la sigla y no el Cod_Mo,en el caso Encargado y Firmado_Por, me salga el nombre y no el CI(Carnet de Identidad) esto para ambos casos tanto para el atributo Encargado y Firmado_por de la tabla obras.
Cave saber que lo he intando con esta consulta:
Código SQL [-]
Select
Nro_Ob as Nro,
Nombre_Obra,
Razon_Social as Nombre_Cliente,
Fecha_Contrato,
Precio,
Sigla,
Fecha_I as Fecha_Inicio,
Plazo,
Lugar,
Nombre as Encargado,
Firmado_Parte_Contraria,
Nombre as Aprobado_Por,
Estado as Estado_Actual,
Descripcion from Obras o,Empleado e,Moneda m,Cliente c 
Where o.Cliente=c.Cod_Cli and o.Encargado=e.ci and o.Moneda=m.Cod_Mo 
and o.Firmado_Por=e.ci;
Pero por alguna razon el motor me bota una respuesta vacia;
Que estoy haciendo de mal?:confused:
Muchas gracias de antemano.....;)

jrperezt 01-02-2009 00:24:04

Hola.

Yo no controlo mucho de MySql, te contesto por la experiencia que tengo con otras bases de datos. El problema es que a lo mejor te falta algún registro en alguna de las tablas con la que estás relacionando la tabla "Obras", o que en algunos de los campos relacionados tiene un "null".

Imaginate que en algunos registros tienes en los campos "Encargado" y "Firmado_por" el valor null, y quieres que te aparezcan en la consulta, entonces tendrás que usar algo así.

Código:

Select
Nro_Ob as Nro,
Nombre_Obra,
Razon_Social as Nombre_Cliente,
Fecha_Contrato,
Precio,
Sigla,
Fecha_I as Fecha_Inicio,
Plazo,
Lugar,
Firmado_Parte_Contraria,
Estado as Estado_Actual,
Descripcion,
e.Nombre as Encargado,
f.Nombre as Aprobado_Por

from Obras o
  LEFT JOIN Empleado e ON o.Encargado=e.ci
      LEFT JOIN Empleado f ON o.Firmado_Por=f.ci

    ,Moneda m,Cliente c
Where o.Cliente=c.Cod_Cli and  o.Moneda=m.Cod_Mo

Espero que esto te sirva, por lo menos de orientación.

MaMu 01-02-2009 22:30:13

A mi me funciona, pero.... fijate de imcluir el Alias a cada campo segun corresponda

Código SQL [-]
from Obras o,Empleado e,Moneda m,Cliente c

por ejemplo

e.Nombre as Encargado,
m.Dolares as Precio

etc.

Saludos

rgstuamigo 02-02-2009 19:47:16

Gracias
 
Ok amigo al parecer funciona:D, gracias por el aporte y perdona por tardar en responderte.;).
Saludos desde Bolivia.:)


La franja horaria es GMT +2. Ahora son las 12:27: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