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

Buscar datos en varias tablas a la vez

Estas en el tema de Buscar datos en varias tablas a la vez en el foro de Mysql en Foros del Web. Que tal! Espero me puedan ayudar. Necesito realizar una busqueda en distintas tablas dentro de una base de datos, lo que requiero es que en ...
  #1 (permalink)  
Antiguo 17/04/2009, 17:35
Avatar de brygom  
Fecha de Ingreso: marzo-2008
Mensajes: 79
Antigüedad: 16 años, 1 mes
Puntos: 0
Buscar datos en varias tablas a la vez

Que tal!
Espero me puedan ayudar.
Necesito realizar una busqueda en distintas tablas dentro de una base de datos, lo que requiero es que en todas las tablas se busque un mismo numero de tarjeta si existe entonces obtener los datos de esa tabla. Lo estoy intentado asi:

Código:
select * from bf01, bf04 where bf01.NoTarjetabf01 = 1 or bf04.NoTarjetabf04 = 1
Pero esta consulta me trae resultados repetidos de la tabla bf01 y me trae otros resultados que no tienen el mismo numero de tarjeta de bf04.
Existe alguna forma de realizar esto de una forma optima ya que son muchas tablas con gran cantidad de datos en donde hay que buscar?

Otra forma que he intentado es esta:

Código:
SELECT * FROM bf01
LEFT OUTER JOIN bf04 ON bf01.NoTarjetabf01=bf04.NoTarjetabf04
LEFT OUTER JOIN bf05 ON bf04.NoTarjetabf04=bf05.NoTarjetabf05
LEFT OUTER JOIN bf06 ON bf05.NoTarjetabf05=bf06.NoTarjetabf06
LEFT OUTER JOIN bf14 ON bf06.NoTarjetabf06=bf14.NoTarjetabf14
WHERE bf01.NoTarjetabf01 = 1
Pero nada más me busca en la tabla bf01, el caso es que puede que el numero indicado no exista en la bf01 pero si exista en la bf04 ó bf05 ó bf06 y así



Gracias!
  #2 (permalink)  
Antiguo 18/04/2009, 18:31
Avatar de cala932  
Fecha de Ingreso: septiembre-2006
Ubicación: San Juan-Argentina
Mensajes: 902
Antigüedad: 17 años, 7 meses
Puntos: 9
Respuesta: Buscar datos en varias tablas a la vez

HOlas prueba lo siguiente :
Código:
SELECT * FROM bf01
LEFT  JOIN bf04 ON bf01.NoTarjetabf01=bf04.NoTarjetabf04
LEFT  JOIN bf05 ON bf01.NoTarjetabf04=bf05.NoTarjetabf05
LEFT  JOIN bf06 ON bf01.NoTarjetabf05=bf06.NoTarjetabf06
LEFT  JOIN bf14 ON bf01.NoTarjetabf06=bf14.NoTarjetabf14
WHERE bf01.NoTarjetabf01 = 1
El tema es que en este caso si al menos existe en la tabla bf01 la consulta te devolvera resultados. Si lo que quieres es que solo te devuelva resultado si y solo si en todas las otras tablas tambien se encuentra ese registro entonces deberias utilizar solo el JOIN, el problema es que si suponemos que en la tabla bf04 se encuentra pero en la tabla bf05 no se encuentra, entonces la consulta no te devolvera resultados. Podrias de ultima realizar las consultas entre tablas por se parado, es decir, primero bf01 con bf04, luego otra consulta con bf01 y bf05 y asi sucesivamente. Espero que te sea de ayuda.
Saludos
__________________
->Aprender es un proceso que incluye el error..
  #3 (permalink)  
Antiguo 19/04/2009, 05:59
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Buscar datos en varias tablas a la vez

Mi pregunta es si las tablas están relacionadas. Si lo están, la propuesta de Cala932 te valdría, pero si no es así, tendrás que recurrir a UNION ALL
(select campo1, "bf01" tabla, campo2 from bf01 where NoTarjetabf01= 1)
UNION ALL
(select campo1, "bf04" tabla, campo2 from bf04 where NoTarjetabf04= 1)

Los campos deben seleccionarse en el mismo número y ser del mismo tipo. Naturalmente puedes hacerlo con más tablas.
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 19:14.