Ver Mensaje Individual
  #21 (permalink)  
Antiguo 05/03/2013, 21:05
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Consulta multiple para buscador

INNER JOIN (ver artículo: INNER JOIN) se usa para indicar que uno o más campos de una tabla están relacionados con otros tantos de la seguda, tales que sólo se devolverán como resultado aquellos registros donde los valores sean coincidentes entre ambas.
En esencia es el caso de una factura, donde el encabezado de la factura (numero, fecha, cliente, etc) se registra en una tabla, mientras que el detalle (numerode factura, numero de item, codigo de articulo, cantidad) se registra en otra. como la segunda tabla (detalle) contiene también en cada registro el numero de factura a que pertenece ese subitem, la consulta queda:
Código MySQL:
Ver original
  1. SELECT a, b, c, d, e, f
  2. FROM factura F INNER JOIN detalle D ON F.numerofactura = D.numerofactura
  3. WHERE F.numerofactura = 123
Esto devolverá sólo los datos de la factura 123, junto con todo el detalle de la misma factura.

En tu caso, para poder saber cómo relacionar hoteles, rest, pecuaria, nautica, embarcaderos, eventos, emergencias y clasificados, necesitamos conocer la estructura de cada tabla (el CREATE TABLE de cada una), para ver cómo es la relación, ya que es muy posible (metida de pata muy habitual en los principiantes) que hayas usado diferentes nombres para le valor de FOREIGN KEY respecto de la PK referida. Y en ese caso, MySQL no puede saberlo. Hay que indicarlo en forma específica.
Por ejemplo:
Código MySQL:
Ver original
  1. SELECT a, b, c, d, e, f
  2. FROM factura F INNER JOIN detalle D ON F.id = D.id_factura
  3. WHERE F.id = 123

Este sería el ejemplo más habitual de como ponen el mismo valor con diferenets nombres en cada tabla.
Como MySQL, en los JOIN implícitos (la coma) hace matching usando el nombre de las columnas, puede estar intentando cruzar ID de una tabla con ID de otra, cuando en realidad se refieren a valores completamente diferentes e incompatibles.
Y en ese caso los resultados son irreales, si es que existen.

Ten muy en cuenta que no se pueden ni se deben hacer JOINs entre tablas que no estén relacionadas. Es decir, que si no estableciste relaciones PK/FK en tus tablas, la consulta sería simplemente imposible; devolvería trash data.

Si no sabes cómo recuperar los CREATE TABLE, simplemente haz:
Código MySQL:
Ver original
  1. SHOW CREATE TABLE hoteles;
  2. SHOW CREATE TABLE pecuaria;
  3. SHOW CREATE TABLE nautica;
  4. SHOW CREATE TABLE embarcaderos;
  5. SHOW CREATE TABLE eventos;
  6. SHOW CREATE TABLE emergencias;
  7. SHOW CREATE TABLE clasificados ;
Copia el resultado de cada una, y postealo acá.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 05/03/2013 a las 21:11