Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-05-2003
j2mg j2mg is offline
Registrado
 
Registrado: may 2003
Posts: 4
Poder: 0
j2mg Va por buen camino
Smile consulta SQL que me resulta compleja

Buenas tardes.

Pretendo preguntarles por una consulta SQL que haga lo siguiente:

Sea que tengamos 4 tablas. personas, telefonos, direcciones, identificadores

personas la clave es codper numerico, unico y mas campos.

telefonos una clave externa es codper y numtel (una persona puede tener uno, muchos o ningún telefono)y codide para el identificador

direcciones una clave externa es codper y direc (una persona puede tener una, muchas o ninguna dirección) y codide para el identificador

identificadores, es una tabla con clave codide y nombre, sirve para tener una misma identificación por ejemplo, telefono y dirección privados, del trabajo, movil ..... amante, jeje

bueno, uana persona puede tener telefonos y direcciones asignados con codper con los mismos y o diferentes codide (despachos con telefonos, vacaciones sintelefono y moviles sin dirección)

quiero y no logro....... una consulta que lo resuelva y para un codper dado resuelva las cobinaciones ejemplo....


nombre numtel direccion

domicilio 1111111111 sucasa
movil 121212121 null
vacacion null en la cabaña
despacho 132323232 una direccion
despacho2 134434343 otra direccion

son los nulos los que no logro ni con outer join ni suplicando


¿me echais una mano?
Responder Con Cita
  #2  
Antiguo 28-05-2003
jceluce jceluce is offline
Miembro
 
Registrado: may 2003
Ubicación: Mar del Plata - Argentina
Posts: 29
Poder: 0
jceluce Va por buen camino

A ver, a ver... como tu ejemplo sin los identificadores...

select p.nombre, t.numtel, d.direc
from (personas.p left join telefonos t on (p.codper = t.codper))
left join direcciones d on (p.codper = d.codper)

Ahora con los identificadores...

select p.nombre, t.numtel, d.direc,
i.nombre as tel_iden, j.nombre as dir_iden
from (((personas.p left join telefonos t on p.codper = t.codper)
left join direcciones d on p.codper = d.codper)
join identificadores i on t.codide = i.codide)
join identificadores j on d.codide = j.codide

no lo he probado pero creo que va a andar :-)
__________________
Saludos

Javier
Responder Con Cita
  #3  
Antiguo 28-05-2003
j2mg j2mg is offline
Registrado
 
Registrado: may 2003
Posts: 4
Poder: 0
j2mg Va por buen camino
Unhappy

Estimado amigo.

Te agradezco que hayas contestado tan rápido.....

ese camino que propones .... ya lo anduve.

Voy a preparar un ejemplo y te lo envio ¿ok?

Muchas gracias
Responder Con Cita
  #4  
Antiguo 29-05-2003
j2mg j2mg is offline
Registrado
 
Registrado: may 2003
Posts: 4
Poder: 0
j2mg Va por buen camino
Bueno veamos este ejemplo

telefonos codper codide telefono
4 1 1111
4 2 2222
4 3 3333

direcciones codper codide direccion
4 1 calle1
4 4 calle 4
la consulta:
select t.codide, t.telefono, d.direccion
from telefonos t left join direcciones d
on t.codide=d.codide
where t.codper=4 and d.codper=4

que es del estilo de las que me propones, solo logra obtener el registro presente en las dos tablas de codide=1

igual que esta otra mas sencilla:
select t.codide, t.telefono, d.direccion
from telefonos t left join direcciones d
on t.codide=d.codide
where t.codper=4 and d.codper=4
pero como lo que pretendo obtener es

t.codide telefono direccion d.codide
1 1111 calle 1 1
2 2222 null null
3 3333 null null
null null calle 2 4

es como si faltaran sucesivamente tras dos consultas sencillas...

select codide, telefono
from telefonos
where codper=4 and codide not in
(select codide from direcciones where codper=4)

que devuelve los dos telefonos sin direccion y


select codide, direccion
from direcciones
where codper=4 and codide not in
(select codide from telefonos where codper=4)

que entrega la direccion sin telefono.........

Lo que no se hacer es lograrlo de una sola consulta

¿Puedes echarme otra mano?

Gracias Juan

(Si estaré torpe que es la segunda vez que lo pierdo)
Responder Con Cita
  #5  
Antiguo 29-05-2003
jceluce jceluce is offline
Miembro
 
Registrado: may 2003
Ubicación: Mar del Plata - Argentina
Posts: 29
Poder: 0
jceluce Va por buen camino
Ah, si, si..esta vez va probado...

select t.codide, t.telefono, d.direccion, d.codide
from telefonos t full outer join direcciones d on (t.codide = d.codide)
where
(t.codper = 4) or (d.codper = 4)

Espero te ayude
__________________
Saludos

Javier
Responder Con Cita
  #6  
Antiguo 29-05-2003
j2mg j2mg is offline
Registrado
 
Registrado: may 2003
Posts: 4
Poder: 0
j2mg Va por buen camino
Talking

Buenas noches.

¡Claro que si! Acabo de entrar, y he visto como Javier resolvió acertadadmente el problema. Enhorabuena.

Yo también, encontré una solución que te expongo a continuación.

select i.nombre, t.telefono, d.direccion
from (((personas p left join telefonos t
on p.codigo = t.codper )
full join direcciones d
on d.codper = p.codigo and d.codide=t.codide)),
identificadores i
where i.codigo=t.codide and p.codigo=4 or d.codper=4 and i.codigo=d.codide

El truco está en usar la tabla de personal que marcará los registros a listar, un encuentro externo por los dos lados para obtener los telefonos sin dirección y lo contrario

Así que estoy muy contento

Un saludo a todos y en especial a Javier que se lo ha ganado con su buen royo y su interés

Hasta otra.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 20:43:49.


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
Copyright 1996-2007 Club Delphi