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

Ayuda con Select Union

Estas en el tema de Ayuda con Select Union en el foro de Bases de Datos General en Foros del Web. Buenas queria hacer una consulta que parece una tonteria pero no me sale. Tengo 2 tablas: Clientes y Contactos_de_Clientes(aqui hay un id_cliente que dice que ...
  #1 (permalink)  
Antiguo 23/03/2009, 05:10
 
Fecha de Ingreso: marzo-2009
Mensajes: 4
Antigüedad: 15 años, 1 mes
Puntos: 0
Ayuda con Select Union

Buenas queria hacer una consulta que parece una tonteria pero no me sale. Tengo 2 tablas: Clientes y Contactos_de_Clientes(aqui hay un id_cliente que dice que contacto es de que cliente).

Tengo que hacer 1 UNICA select donde aparezcan todos los clientes en una lista y en el caso de que tenga contactos ese cliente que aparezcan justo debajo del cliente en cuestión. Ejemplo:

Lista
-------
Cliente1 (Este tiene 2 contactos)
Contacto1 del Cliente 1
Contacto2 del Cliente 1
Cliente2 (este no tiene contactos)
Cliente3
Contacto 1 del Cliente 3
Cliente4
-.........

Parece facil, pero no se como se hace.
  #2 (permalink)  
Antiguo 23/03/2009, 06:10
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda con Select Union

De la forma como quieres tu salida, no es posible.

Sin embargo puedes obtner esa información asi:
Código sql:
Ver original
  1. SELECT campo1, campo2, campo3, campo4 FROM contactos_de_clientes INNER JOIN clientes ON contactos_de_clientes.id_cliente=clientes.id_clientes;

donde campo1,campo2, campo3, campo4 son los campos que quieres en tu salida de ambas tablas.

Un saludo
  #3 (permalink)  
Antiguo 23/03/2009, 06:37
 
Fecha de Ingreso: marzo-2009
Mensajes: 4
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Ayuda con Select Union

Si gracias, los datos que obtengo son los que quiero. El problema es el orden que necesito justamente ese que he mencionado en el primer post. Es imposible conseguir ese orden?
  #4 (permalink)  
Antiguo 23/03/2009, 06:43
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda con Select Union

Desde la base de datos no es posible.
Pero por que no organizas los datos como quieres desde tu sistema?
  #5 (permalink)  
Antiguo 23/03/2009, 07:49
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Ayuda con Select Union

Existe una forma de obtener una relación semejante, pero en cualquier caso sólo tendría sentido a dos columnas y no en la misma columna, y además implicaría el uso de subconsultas.
Una consulta así:
Código sql:
Ver original
  1. SELECT Cliente1, IFNULL(Contacto1,'') Contacto1
  2. FROM Cliente LEFT JOIN Contacto USING(ClienteId);
Te devolvería el esquema base, pero en cualquier caso devolvería el nombre del cliente repetido.
Para eliminar el cliente habría que crear dos niveles de subconsultas más para encerrar esto, y usar una variable de usuario dinámica
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 23/03/2009, 22:00
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda con Select Union

Impresionante gnzsoloyo. La salida es muy similar. Pero no implicaría mas recursos el uso de una sentencia con dos niveles de subconsultas para mostrar una gran cantidad de clientes y contactos?

Hacer esto desde un lenguaje de programación no parece ser muy complicado. Hasta que punto es conveniente dejar en manos de mysql mostrar la salida lista para mostrar?

Última edición por huesos52; 24/03/2009 a las 07:59
  #7 (permalink)  
Antiguo 25/03/2009, 07:43
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Ayuda con Select Union

Una subconsulta de cuatro niveles de esta clase en realidad usa menos recursos, porque no accede a índices y tablas en disco sino que solamente opera con el buffer de datos. Esto significa que trabaja con tablas virtuales en memoria...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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 11:10.