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

consulta a varias tablas a la vez

Estas en el tema de consulta a varias tablas a la vez en el foro de Mysql en Foros del Web. hola amigos tenia una duda como puedo consultar varias tablas a la vez, y cuando encuentre el dato que busco que no siga buscando en ...
  #1 (permalink)  
Antiguo 19/07/2012, 15:12
 
Fecha de Ingreso: abril-2012
Mensajes: 31
Antigüedad: 10 años, 2 meses
Puntos: 0
consulta a varias tablas a la vez

hola amigos tenia una duda

como puedo consultar varias tablas a la vez, y cuando encuentre el dato que busco que no siga buscando en el resto de tablas

si tenemos 4 tablas (t1,t2,t3,t2)


select * from t1,t2,t3,t4 where nombre=pepe


imaginemos que el nombre de 'pepe' esta en la tabla 't2'

Ahy alguna forma de hacer que cuando encuentre el nombre de 'pepe' en la tabla 't2', ya no siga consultando la tabla t3 y t4
  #2 (permalink)  
Antiguo 19/07/2012, 15:18
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 15 años, 5 meses
Puntos: 447
Respuesta: consulta a varias tablas a la vez

Hola netoraaacing:

No, no se puede hacer lo que quieres... una consulta se realiza de manera exhaustiva, no de manera selectiva.

saludos
Leo.
  #3 (permalink)  
Antiguo 19/07/2012, 15:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 14 años, 7 meses
Puntos: 2658
Respuesta: consulta a varias tablas a la vez

Partamos de algunos detalles: La busqueda no es secuencial, no confundir con Excel, se usan internamente algoritmos que optimizan las busquedas y no se saltean. Además, la busqueda no se hace columna a columna, sino en las que se indique en el WHERE, por lo que debe leer todas las tablas para poder evaluar la condición. A esto debes sumarle que las tablas deben estar relacionadas, o el resultado será caótico. Lo mas cercano a lo que quieres es poner al final:
Código MySQL:
Ver original
  1. ...LIMIT 1
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 19/07/2012, 15:40
 
Fecha de Ingreso: abril-2012
Mensajes: 31
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: consulta a varias tablas a la vez

gracias por vuestras respuestas y por ser tan rapidos en responder

una pregunta como hace entonces la busqueda:

select id,apellido,edad,pais from t1,t2,t3,t4 where nombre=pepe

hace la busqueda por el campo nombre, o hace la busqueda a partir del id

por que segun lo que tengo entendido si existe un ID unico, y hace la busqueda por ese id, la busqueda es mas rapida


Nota: lo del limit no lo puse por que ya se que solo me devolvera un unico resultado
  #5 (permalink)  
Antiguo 20/07/2012, 08:07
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 15 años, 5 meses
Puntos: 447
Respuesta: consulta a varias tablas a la vez

Hola de nuevo netoraaacing:

Por lo que puedo ver, no tienes muchas nociones de SQL, creo que es conveniente que antes de continuar busques cualquier manual de SQL para principiantes, para que vayas comprendiendo cómo trabajan las BD's.

Cita:
una pregunta como hace entonces la busqueda:

select id,apellido,edad,pais from t1,t2,t3,t4 where nombre=pepe
De entrada tu consulta tienes varios problemas, primero, estás listando 4 tablas en el FROM, pero no estás especificando ninguna relación entre tus tablas, por lo tanto SE ESTÁ REALIZANDO UN PRODUCTO CARTESIANO... las tablas t1, t2, t3 y t4 deben tener algún campo en común pero debes especificarlo en la consulta. Checa este script.

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tablaA;
  2. +------+-------------+
  3. | id   | descripcion |
  4. +------+-------------+
  5. |    1 | uno         |
  6. |    2 | dos         |
  7. |    3 | tres        |
  8. +------+-------------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT * FROM tablaB;
  12. +------+-------------+
  13. | id   | descripcion |
  14. +------+-------------+
  15. |    1 | one         |
  16. |    2 | two         |
  17. |    3 | three       |
  18. +------+-------------+
  19. 3 rows in set (0.00 sec)
  20.  
  21. mysql> SELECT * FROM tablaA, tablaB;
  22. +------+-------------+------+-------------+
  23. | id   | descripcion | id   | descripcion |
  24. +------+-------------+------+-------------+
  25. |    1 | uno         |    1 | one         |
  26. |    2 | dos         |    1 | one         |
  27. |    3 | tres        |    1 | one         |
  28. |    1 | uno         |    2 | two         |
  29. |    2 | dos         |    2 | two         |
  30. |    3 | tres        |    2 | two         |
  31. |    1 | uno         |    3 | three       |
  32. |    2 | dos         |    3 | three       |
  33. |    3 | tres        |    3 | three       |
  34. +------+-------------+------+-------------+
  35. 9 rows in set (0.00 sec)
  36.  
  37. mysql> SELECT * FROM tablaA A
  38.     -> INNER JOIN tablaB B ON A.id = B.id;
  39. +------+-------------+------+-------------+
  40. | id   | descripcion | id   | descripcion |
  41. +------+-------------+------+-------------+
  42. |    1 | uno         |    1 | one         |
  43. |    2 | dos         |    2 | two         |
  44. |    3 | tres        |    3 | three       |
  45. +------+-------------+------+-------------+
  46. 3 rows in set (0.00 sec)

Observa que en el primer caso (qué es como estás poniendo tu consulta) se "multiplican" los registros, eso es el producto cartesiano.

Segundo, las comparaciones con cadenas (como pepe) se deben poner entre COMILLAS ('), y si el campo que quieres comparar EXISTE EN MÁS DE UNA TABLA, debes anteponer el nombre de la tabla que quieras comparar, de lo contrario te marcará un error de AMBIGÜEDAD:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tablaA A
  2.     -> INNER JOIN tablaB B ON A.id = B.id
  3.     -> WHERE descripcion = 'uno';
  4. ERROR 1052 (23000): Column 'descripcion' in where clause is ambiguous
  5.  
  6. mysql> SELECT * FROM tablaA A
  7.     -> INNER JOIN tablaB B ON A.id = B.id
  8.     -> WHERE A.descripcion = 'uno';
  9. +------+-------------+------+-------------+
  10. | id   | descripcion | id   | descripcion |
  11. +------+-------------+------+-------------+
  12. |    1 | uno         |    1 | one         |
  13. +------+-------------+------+-------------+
  14. 1 row in set (0.00 sec)

Finalmente, y ahora si para responder tu pregunta:

Cita:
hace la busqueda por el campo nombre, o hace la busqueda a partir del id
No entiendo el sentido de tu pregunta... la búsqueda la hacer obviamente por el campo NOMBRE, pues es el que estás especificando en el WHERE... si quisieras hacer la búsqueda por ID deberías incluirla utilizando OPERADORES LOGICOS (otro tema para buscar)

Código:
...
WHERE
T1.ID = 1 AND 
T1.Nombre = 'pepe'
...
Saludos
Leo.

Etiquetas: select, tabla, tablas, vez
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 15:10.