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

consulta sencilla con natural join

Estas en el tema de consulta sencilla con natural join en el foro de Bases de Datos General en Foros del Web. Hola a todos, tengo una pregunta sencilla sobre una consulta, pero que nose porque me da vacio... os pongo en situacion: create table categoria ( ...
  #1 (permalink)  
Antiguo 25/05/2010, 06:49
 
Fecha de Ingreso: junio-2009
Mensajes: 103
Antigüedad: 15 años, 6 meses
Puntos: 0
consulta sencilla con natural join

Hola a todos, tengo una pregunta sencilla sobre una consulta, pero que nose porque me da vacio... os pongo en situacion:

create table categoria
(
codcategoria int(9) AUTO_INCREMENT PRIMARY KEY,
nombre varchar(30) NOT NULL UNIQUE KEY
)engine=innodb;

create table componente
(
codcomponente int(9) AUTO_INCREMENT,
codcategoria int(9),
nombre varchar(30) NOT NULL UNIQUE KEY,
PRIMARY KEY(codcomponente,codcategoria),
FOREIGN KEY(codcategoria) references categoria(codcategoria) ON UPDATE CASCADE
)engine=innodb;

Simplemente quiero que me saque una tabla con todos los campos de la tabla componente y que tambien me saque el nombre de la categoria, para ello hago la siguiente consulta:

SELECT componente.nombre as nombre1, categoria.nombre as nombre2, codcomponente,codcategoria FROM componente NATURAL JOIN categoria where codcomponente=1;

aqui saco los datos del registro que sea perteneciente a codcomponente 1, que me falla??
  #2 (permalink)  
Antiguo 25/05/2010, 07:13
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: consulta sencilla con natural join

No entiendo en que parte te falla..

Pon unos registros de prueba, lo que esperas y lo que te saca actualmente.
Pregunta... Comprendes realmente lo que hace el natural join?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 25/05/2010, 08:54
 
Fecha de Ingreso: junio-2009
Mensajes: 103
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: consulta sencilla con natural join

Cita:
Iniciado por huesos52 Ver Mensaje
No entiendo en que parte te falla..

Pon unos registros de prueba, lo que esperas y lo que te saca actualmente.
Pregunta... Comprendes realmente lo que hace el natural join?
hasta lo que yo se el natural join une varias tablas por el campo en comun.

Un ejemplo de lo que quiero hacer:

Imaginaos que tenemos los siguiente registros:

En tabla categoria:
codcategoria nombre
1 Perifericos

En tabla componente:
codcomponente codcategoria nombre
1 1 Usbs

pos yo ahora quiero que al hacer una consulta me muestre:

codcomponente codcategoria nombrecategoria nombrecomponente
1 1 Perifericos Usbs




es decir, que aparte de los campos de la tabla componente me muestre tambien el nombre de la tabla categoria pero no se porque no me tira :s
  #4 (permalink)  
Antiguo 25/05/2010, 09:27
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: consulta sencilla con natural join

Raro lo del natural... a mi tampoco me dió. Igual es un comando que no me da mucha confianza.

prueba así:
Código SQL:
Ver original
  1. SELECT
  2. co.nombre AS nombre1,
  3. ca.nombre AS nombre2,
  4. co.codcomponente,
  5. ca.codcategoria
  6. FROM componente co
  7. INNER JOIN
  8. categoria ca
  9. ON
  10. co.codcategoria=ca.codcategoria
  11. WHERE co.codcomponente=1;

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 25/05/2010, 09:43
 
Fecha de Ingreso: junio-2009
Mensajes: 103
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: consulta sencilla con natural join

ahora ya si que funciona bien, muchas gracias huesos ;)

duda resuelta
  #6 (permalink)  
Antiguo 25/05/2010, 09:47
Avatar de 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 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)
  #7 (permalink)  
Antiguo 25/05/2010, 10:26
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: consulta sencilla con natural join

Interesante gnzsoloyo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: join, natural, sencilla
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 09:02.