Ver Mensaje Individual
  #5 (permalink)  
Antiguo 20/07/2012, 08:07
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 2 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.