Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

ayuda con consulta

Estas en el tema de ayuda con consulta en el foro de SQL Server en Foros del Web. tengo una tabla con este diseño --------direccion --> id --> id_cliente --> typo --> direccion1 --> direccion2 --> pais -------cliente --> id_cliente --> name lo ...
  #1 (permalink)  
Antiguo 13/06/2011, 13:49
Avatar de yense  
Fecha de Ingreso: febrero-2008
Ubicación: Perú Lima
Mensajes: 340
Antigüedad: 16 años, 2 meses
Puntos: 3
ayuda con consulta

tengo una tabla con este diseño

--------direccion
--> id
--> id_cliente
--> typo
--> direccion1
--> direccion2
--> pais

-------cliente
--> id_cliente
--> name

lo que quiero hacer es

select cl.name, dr1.direccion1, dr2.direccion2, dr1.pais from cliente cl
inner join direccion dr1 on cl.id_cliente = dr1.id_cliente and dr1.type = 'home'
inner join direccion dr2 on cl.id_cliente = dr2.id_cliente and dr2.type = 'work'

pero cuando ejecuto la consulta siempre me da vacia

como puedo resolver ese problema
__________________
©® -> Conocer algo mas es dar un paso mas <- ®©
  #2 (permalink)  
Antiguo 13/06/2011, 14:08
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: consultas doble

Si "home" y "work" son tus filtros, debes colocarlos en el WHERE
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 13/06/2011, 14:17
Avatar de yense  
Fecha de Ingreso: febrero-2008
Ubicación: Perú Lima
Mensajes: 340
Antigüedad: 16 años, 2 meses
Puntos: 3
Respuesta: consultas doble

a disculpa me olvide colocar el where en el ejemplo que uso tambien tengo el where

select cl.name, dr1.direccion1, dr2.direccion2, dr1.pais from cliente cl
inner join direccion dr1 on cl.id_cliente = dr1.id_cliente and dr1.type = 'home'
inner join direccion dr2 on cl.id_cliente = dr2.id_cliente and dr2.type = 'work'
where cl.id_cliente = 15

pero aun asi no me muestra nada pero cuando cambio los inner por full si me muestra los datos pero el detalle es que en la columna de direccion 2 "dr2.direccion2" muestra null

como puedo solucionar ese problema o algun enlace para poder investigar


gracias
__________________
©® -> Conocer algo mas es dar un paso mas <- ®©
  #4 (permalink)  
Antiguo 13/06/2011, 14:34
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: ayuda con consulta

Usa left join, lo que esta pasando con el inner es que tienen que estar los 2 valores en las 2 tablas si no estan entonces no presenta nada, con el left join presentara los datos que esten en la primer tabla aunque en la segunda dichos datos esten vacios.

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 13/06/2011, 14:52
Avatar de yense  
Fecha de Ingreso: febrero-2008
Ubicación: Perú Lima
Mensajes: 340
Antigüedad: 16 años, 2 meses
Puntos: 3
Respuesta: ayuda con consulta

ok si funciona pero el detalle es que si tengo datos en mi tabla no son null




en esa imagen muestro una tabla con la que trabajo

si te puedes dar cuenta hay una columna donde se ve "billing" y "shipping" esos son los tipos que manejo y en la siguiente columna es la primera direccion y como se ve tengo valores

asi es que no me esta funcionando
__________________
©® -> Conocer algo mas es dar un paso mas <- ®©
  #6 (permalink)  
Antiguo 13/06/2011, 14:54
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: ayuda con consulta

y la imagen??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 13/06/2011, 15:45
Avatar de yense  
Fecha de Ingreso: febrero-2008
Ubicación: Perú Lima
Mensajes: 340
Antigüedad: 16 años, 2 meses
Puntos: 3
Respuesta: ayuda con consulta

es el contenido de mi tabla

o es que no lo ves la imagen
__________________
©® -> Conocer algo mas es dar un paso mas <- ®©
  #8 (permalink)  
Antiguo 13/06/2011, 15:53
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: ayuda con consulta

No veo la imagen
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 13/06/2011, 16:36
Avatar de yense  
Fecha de Ingreso: febrero-2008
Ubicación: Perú Lima
Mensajes: 340
Antigüedad: 16 años, 2 meses
Puntos: 3
Respuesta: ayuda con consulta

te dejo todo el contenido

tabla_clientes
- id_cliente
- name
- detalle

tabla_direccion
- id_direccion
- typo_direccion
- direccion1
- direccion2
- id_cliente

en caso del campo "typo_direccion" solo tengo "home" y "work"
cuando agrego un usuario este le le agrega dos registros en la direccion

asi es que quiero mostrar la "direccion1" de los dos tipos

para ello hice esta consulta

select cl.id_cliente , cl.name , dr1.direccion1 , dr2.direccion1 from tabla_clientes cl
inner join tabla_direccion dr1 on cl.id_cliente = dr1.id_cliente and dr1.typo_direccion = 'home'
inner join tabla_direccion dr2 on cl.id_cliente = dr2.id_cliente and dr2.typo_direccion = 'work'
where cl.name like 'parte_nombre%'


bueno esto es todo lo que quiero hacer

pero cuando ejecuto esta consulta no me muestra nada por el motivo que en la segunda vez que uso la tabla_direccion esta siempre manda null


como puedo hacer dicha consulta

si me puede ayudar
__________________
©® -> Conocer algo mas es dar un paso mas <- ®©
  #10 (permalink)  
Antiguo 14/06/2011, 07:21
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: ayuda con consulta

No seria mejor asi:

select cl.id_cliente , cl.name , dr1.direccion1 , dr2.direccion1 from tabla_clientes cl
inner join tabla_direccion dr1 on cl.id_cliente = dr1.id_cliente
inner join tabla_direccion dr2 on cl.id_cliente = dr2.id_cliente
where cl.name like 'parte_nombre%' and (dr2.typo_direccion = 'work' and dr1.typo_direccion = 'home')


Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 14/06/2011, 08:28
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: ayuda con consulta

uan pregunta, porque tienes 2 direcciones si al final solo vas a consultar, en fin... ahi te envio una forma de que la consulta resulte en una sola linea...
Código SQL:
Ver original
  1. SELECT  CL.NAME
  2.     ,   (   SELECT  DR1.DIRECCION1
  3.             FROM    DIRECCION DR1
  4.             WHERE   CL.ID_CLIENTE   =   DR1.ID_CLIENTE
  5.                 AND DR1.TYPE        =   'home'
  6.         )   DIRECCION1
  7.     ,   (   SELECT  DR2.DIRECCION1
  8.             FROM    DIRECCION DR2
  9.             WHERE   CL.ID_CLIENTE   =   DR2.ID_CLIENTE
  10.                 AND DR2.TYPE        =   'work'
  11.         )   DIRECCION2
  12. FROM    CLIENTE CL
  13. WHERE   CL.ID_CLIENTE   =   15
__________________
Odio verte ir, pero me encanta verte yendo :)
  #12 (permalink)  
Antiguo 14/06/2011, 12:07
 
Fecha de Ingreso: febrero-2011
Ubicación: Peru-Lima-Chorrillos
Mensajes: 19
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: ayuda con consulta

Estimado Amigo:

Que tal un gusto en saludarte, permiteme hacerte una acotación en lo que concierne a diseño de tablas , en este caso llaves foraneas FK, no trabajes con valores nulos, en tu tabla como primer dato ponle el famoso <NINGUNO> , esto te llevaria a trabajas con tus querys con el Inner Join solamente, y cuando tengas datos masivos veras la performance de tu base de datos.

Saludos cordiales,
Ronald León Madrid.

Etiquetas: doble
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:06.