Ver Mensaje Individual
  #6 (permalink)  
Antiguo 25/05/2010, 09:47
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: 16 años, 4 meses
Puntos: 2658
Respuesta: consulta sencilla con natural join

Bueno, con tantos problemas es mejor ir al Manual de Referencia:
Cita:
El NATURAL [LEFT] JOIN de dos tablas se define semánticamente equivalente a un INNER JOIN o LEFT JOIN con una cláusula USING que nombra todas las columnas que existen en ambas tablas.
De esto se desprenden dos cosas:
1) Para usarlo sin condición ON o USING requiere que se crucen todos los campos de ambas tablas, y evidentemente que los campos tengan nombres iguales, tipos de columna iguales, y valores iguales para devolver algo.
2) Se puede suplantar un NATURAL JOIN por un INNER JOIN, sin problemas, porque para el parser de MySQL son equivalentes, con lo que obtendrás mejores resultados.

En el contexto del primer punto, puede que haya problemas si los campos se denominan diferente, o son cantidades diferentes de campos, ya que uno de los campos será cruzado con NULL, con lo que no devolvería nada.

Además, al poner NATURAL JOIN sin condición ON se están cruzando dos campos que tienen dominios distintos: `componente`.`nombre`, contiene los nombres de los componentes, mientras que `categoria`.`nombre` contiene los nombres de las categorías... Eso significa que son dominios incompatibles.

Entonces, esto:
Código MySQL:
Ver original
  1.    C.nombre nombre1,
  2.    CA.nombre nombre2,
  3.    C.codcomponente,
  4.    CA.codcategoria
  5. FROM componente C
  6.    NATURAL JOIN categoria  CA
  7. WHERE codcomponente=1;

sería equivalente a esto;
Código MySQL:
Ver original
  1.    C.codcomponente `Nro. Componente`,
  2.    C.nombre `Componente`,
  3.    CA.codcategoria `Id. Categoria`
  4.    CA.nombre `Categoria`
  5. FROM componente C
  6.    INNER JOIN categoria  CA USING(codcategoria)
  7. WHERE codcomponente=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)