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

Consulta Inner Join Devuelve Vacio Si en Una tabla No Hay Resultado

Estas en el tema de Consulta Inner Join Devuelve Vacio Si en Una tabla No Hay Resultado en el foro de Mysql en Foros del Web. muy buenas tardes tengo una dilema que no me deja avanzar en mi trabajo de universidad me podrian ayudar . de antemano muchas gracias. tengo ...
  #1 (permalink)  
Antiguo 17/04/2014, 17:13
 
Fecha de Ingreso: noviembre-2008
Mensajes: 150
Antigüedad: 15 años, 5 meses
Puntos: 1
Pregunta Consulta Inner Join Devuelve Vacio Si en Una tabla No Hay Resultado

muy buenas tardes tengo una dilema que no me deja avanzar en mi trabajo de universidad
me podrian ayudar . de antemano muchas gracias.
tengo 2 tablas.
Factura
id idcliente
1 2
2 3

Cliente
id rut nombre
1 14681473 pepe
3 146814743 jorgin


que estan Relacionados por el IDCLIENTE.
lo que sucede que hise un inner join asi

Código SQL:
Ver original
  1. SELECT * FROM clientes
  2. INNER JOIN facturas ON facturas.idcliente = clientes.idcliente
  3. WHERE rut='146814743' LIMIT 1

donde el numero o campo RUT. solo hay en la tabla CLIENTES.
en la tabla FACTURA no lo PUSE. se que esta mal planteado
pero por un tema de forma decidi dejarlo en una TABLA.
lo que sucede que cuando hace la consulta con el numero de RUT como WHERE i existe el ID CLIENTE en la tabla FACTURA devuelve todos los VALORES INCLUIDOS los VALORES de la TABLA FACTURA.
pero sucede si no encuentra ningun IDCLIENTE de la CONSULTA WHERE RUT=''
ME DEVUELVE VACIO TODO COMPLETAMENTE NO ME DEVUELVE NI DATOS DE LA TABLA CLIENTES NI NADA.
ALGUNA SOLUCION O OTRA FORMA DE HACER. DE ANTEMANO MUCHAS GRACIAS!
  #2 (permalink)  
Antiguo 17/04/2014, 17:38
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, 4 meses
Puntos: 2658
Respuesta: Consulta Inner Join Devuelve Vacio Si en Una tabla No Hay Resultado

Vamos a lo básico: Si los clientes se identifican por RUT, y no tienes una clave secundaria o alternativa que relacione a los clientes con las facturas, no existe solución para tu problema.
De hecho, te recomiendo enfáticamente que corrijas tu modelo de datos para poner la FK del cliente en la tabla de facturas antes que tus profesores se den cuenta, porque en cuanto vean que no estableciste la relación te reprobarán sin necesidad de seguir leyendo el trabajo.
¿Te resulta suficientemente claro?
No te exagero. El error que nos describes es de los peores que puedes cometer en un trabajo de la universidad, porque demuestra que no entendiste nada del modelo relacional.
Modifica eso y corrige la metida de pata antes de que se den cuenta.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 17/04/2014, 18:05
 
Fecha de Ingreso: noviembre-2008
Mensajes: 150
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Consulta Inner Join Devuelve Vacio Si en Una tabla No Hay Resultado

si lo solucione amigo . lo que sucede que se puede ingresar 2 tipos de rut . uno rut persona y el otro rut de empresa . recien me entero entonces obligado tengio que agregar un campo rut. y no relacionarlo en idcliente ya que los datos factura solo se usaran para obtener los datos de este cliente si es que estaba registrado previamente. !!
  #4 (permalink)  
Antiguo 18/04/2014, 04:40
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta Inner Join Devuelve Vacio Si en Una tabla No Hay Resultado

A ver, si ya tienes todos los rut en la tabla clientes, puedes añadir un campo rut en la factura y cargar todos los datos mediante una consulta sencilla de actualización; luego podrías eliminar la relación por idcliente y dejarla por rut, pero también tendrías que retocar la programación, claro. Luego harías esa misma consulta con INNER JOIN por rut y filtrado con WHERE por un rut concreto.
Con otras palabras, que si tienes todos los rut cargados en la tabla clientes (indexados), y tienes relacionadas las facturas por idcliente, y añades un campo rut en la tabla facturas, no te resultará complicado actualizar los RUT mediante una simple consulta de actualización. Más adelante podrás eliminar incluso el campo idcliente en ambas tablas y hacer primary key el rut de clientes, que es un identificador único y natural, y foreign key el rut de facturas. Pero tendrás que ir paso a paso.

Debes cumplimentar todos los rut de la tabla clientes, sin dejar ninguno vacío. Y, luego, una vez creado el campo rut en facturas, si el campo en clientes también se llama rut, con algo tan sencillo como esto tendrías los rut en la tabla facturas.
Código MySQL:
Ver original
  1. UPDATE facturas f INNER JOIN clientes c ON f.idcliente = c.idcliente
  2. SET f.rut = c.rut
Comprobado que todo está bien, puedes establecer la relación entre clientes y facturas por el rut, y hacer rut de clientes primary key, tras eliminar, claro, el idcliente, pero claro hay que revisar toda la programación para actuar sobre el rut y con esa relación.
Antes de hacer nada, guarda copia de tu base por si ocurre algo inesperado en el proceso.

Última edición por jurena; 18/04/2014 a las 04:50

Etiquetas: Ninguno
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 10:52.