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

Error al hacer select no me llama ningun registro

Estas en el tema de Error al hacer select no me llama ningun registro en el foro de Mysql en Foros del Web. ESTA ES MI CODIGO PARA CREAR LAS TABLAS Y SUS RELACIONES PERO EL SELECT NO ME BOTA NINGUN REGISTRO @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original ...
  #1 (permalink)  
Antiguo 14/02/2012, 13:21
 
Fecha de Ingreso: febrero-2012
Ubicación: lima-peru
Mensajes: 24
Antigüedad: 12 años, 2 meses
Puntos: 0
Exclamación Error al hacer select no me llama ningun registro

ESTA ES MI CODIGO PARA CREAR LAS TABLAS Y SUS RELACIONES PERO EL SELECT NO ME BOTA NINGUN REGISTRO

Código MySQL:
Ver original
  1.  
  2. create database prueba;
  3.  
  4. use prueba;
  5.  
  6. create table tabla1
  7. (
  8. idtabla1 integer primary key,
  9. nombre varchar(50)
  10.  
  11. insert into tabla1 values(1,'oscar');
  12. insert into tabla1 values(2,'Carlos');
  13.  
  14. CREATE TABLE tabla2
  15. (
  16. idtabla2 INT PRIMARY KEY,
  17. idtabla1_1 INT ,
  18. idtabla1_2 INT,
  19. nombre VARCHAR (50),
  20.  
  21.   INDEX T1_FK1 (idtabla1_1)
  22.   FOREIGN key(idtabla1_1)
  23.   REFERENCES tabla1(idtabla1),
  24.  
  25.   INDEX T1_FK2 (idtabla1_2)
  26.   FOREIGN key (idtabla1_2)
  27.   REFERENCES tabla1(idtabla1)
  28.  
  29.  
  30. INSERT INTO tabla2 VALUES(1,2,1,'oscarzito');
  31. INSERT INTO tabla2 VALUES(2,1,2,'marko');
  32. INSERT INTO tabla2 VALUES(3,2,1,'yo');
  33. INSERT INTO tabla2 VALUES(4,1,2,'el');
  34.  
  35. select tabla2.idtabla2,tabla1.nombre,tabla1.nombre,tabla2.nombre from tabla1 INNER JOIN tabla2 where tabla2.idtabla1_2 = tabla1.idtabla1 and tabla2.idtabla1_1 = tabla1.idtabla1




AL HACER ESE SELECT CON INNER JOIN NO ME ARROJA NINGUN REGISTRO. POR FAVOR ALGUIEN ME YUDE.. el resto del codigo me corre normal solo el select no me bota ningun registro pero las tabla si tienen registros
  #2 (permalink)  
Antiguo 14/02/2012, 13:50
Avatar de 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: Error al hacer select no me llama ningun registro

Si tabla2.idtabla1_2 y tabla2.idtabla1_1 contienen valores diferentes, es imposible que esa consulta devuelva datos.
Mira bien lo que estás pidiendo:
Código MySQL:
Ver original
  1.     tabla2.idtabla2,
  2.     tabla1.nombre,
  3.     tabla1.nombre,
  4.     tabla2.nombre
  5. FROM tabla1
  6.     INNER JOIN
  7.     tabla2
  8.     tabla2.idtabla1_2 = tabla1.idtabla1
  9.     AND
  10.     tabla2.idtabla1_1 = tabla1.idtabla1
Con esa sintaxis, sólo devolverá datos cuando tabla2.idtabla1_2 y tabla2.idtabla1_1 sean iguales entre sí.

Cuando llamas a la misma tabla para cruzarla con dos declaraciones diferentes de FK en otra, debes llamarla dos veces. Para poder hacer eso debes obligatoriamente usar alias.
Además, la sentencia contiene un error de sintaxis: INNER JOIN exige el uso de ON para realizar la relación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 14/02/2012, 13:51
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Error al hacer select no me llama ningun registro

Hola Ozkitar:

Tal pareciera que no haz puesto atención a lo que te han pedido que hagas... este es el tercer post que abres acerca del mismo tema en lugar se seguir con el mismo post hasta darlo por cerrado.

En el Post anterior Ribon te pedia que revisaras el uso de JOIN's en las consultas, veo que lo estás utilizando, pero no lo estás haciendo correctamente... los JOIN's UTILIZAN LA CLÁUSULA ON PARA HACER LAS UNIONES, no el WHERE... tal como lo estás poniendo se realiza un producto cartesiano entre las tablas.

Segundo, la consulta no te está egresando ningún registro pues la condición que pones ES IMPOSIBLE DE QUE OCURRA, al menos con los datos que estás colocando... al poner esto:

Código:
WHERE 
tabla2.idtabla1_2 = tabla1.idtabla1 AND 
tabla2.idtabla1_1 = tabla1.idtabla1
estás diciendo que el idtabla1_1 y el idtabla1_2 SEAN IGUALES, cosa que nunca sucede... matemáticamente estarías diciendo lo siguiente

Código:
A = B y C = B por lo tanto A = C
No estoy seguro de qué es lo que quieres obtener como resultado, pero veamos si esto te sirve. Al tener una REFERENCIA DOBLE en tu tabla2 (es decir dos campos distintos apuntando hacia la tabla1) debes usar DOS VECES LA TABLA1 utilizando un alias, para poder hacer cada join por separado.

Checa este script:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM Tabla1;
  2. +----------+--------+
  3. | idtabla1 | nombre |
  4. +----------+--------+
  5. |        1 | oscar  |
  6. |        2 | Carlos |
  7. +----------+--------+
  8. 2 rows in set (0.00 sec)
  9.  
  10. mysql> SELECT * FROM Tabla2;
  11. +----------+------------+------------+-----------+
  12. | idtabla2 | idtabla1_1 | idtabla1_2 | nombre    |
  13. +----------+------------+------------+-----------+
  14. |        1 |          2 |          1 | oscarzito |
  15. |        2 |          1 |          2 | marko     |
  16. |        3 |          2 |          1 | yo        |
  17. |        4 |          1 |          2 | el        |
  18. +----------+------------+------------+-----------+
  19. 4 rows in set (0.00 sec)
  20.  
  21. mysql> SELECT
  22.     -> T2.idtabla2, T2.nombre,
  23.     -> T1A.idTabla1, T1A.nombre,
  24.     -> T1B.idTabla1, T1B.nombre
  25.     -> FROM tabla2 T2
  26.     -> INNER JOIN tabla1 T1A ON T2.idtabla1_1 = T1A.idtabla1
  27.     -> INNER JOIN tabla1 T1B ON T2.idtabla1_2 = T1B.idtabla1
  28.     -> ORDER BY idtabla2;
  29. +----------+-----------+----------+--------+----------+--------+
  30. | idtabla2 | nombre    | idTabla1 | nombre | idTabla1 | nombre |
  31. +----------+-----------+----------+--------+----------+--------+
  32. |        1 | oscarzito |        2 | Carlos |        1 | oscar  |
  33. |        2 | marko     |        1 | oscar  |        2 | Carlos |
  34. |        3 | yo        |        2 | Carlos |        1 | oscar  |
  35. |        4 | el        |        1 | oscar  |        2 | Carlos |
  36. +----------+-----------+----------+--------+----------+--------+
  37. 4 rows in set (0.00 sec)

Observa que la tabla1 se usa dos veces con los alias (T1A y T1B). Si esto no es lo que necesitas por favor dinos qué es lo que esperas de salida a partir de tus datos.


Cita:
EDITO: el compañero gnzsoloyo se adelantó 5 segundos a mi respuesta, es prácticamente la misma. Saludos
Saludos
Leo.
  #4 (permalink)  
Antiguo 14/02/2012, 14:00
Avatar de 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: Error al hacer select no me llama ningun registro



Pero tu le has dedicado más tiempo a la explicación

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 14/02/2012, 14:35
 
Fecha de Ingreso: febrero-2012
Ubicación: lima-peru
Mensajes: 24
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Error al hacer select no me llama ningun registro

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola Ozkitar:

Tal pareciera que no haz puesto atención a lo que te han pedido que hagas... este es el tercer post que abres acerca del mismo tema en lugar se seguir con el mismo post hasta darlo por cerrado.

En el Post anterior Ribon te pedia que revisaras el uso de JOIN's en las consultas, veo que lo estás utilizando, pero no lo estás haciendo correctamente... los JOIN's UTILIZAN LA CLÁUSULA ON PARA HACER LAS UNIONES, no el WHERE... tal como lo estás poniendo se realiza un producto cartesiano entre las tablas.

Segundo, la consulta no te está egresando ningún registro pues la condición que pones ES IMPOSIBLE DE QUE OCURRA, al menos con los datos que estás colocando... al poner esto:

Código:
WHERE 
tabla2.idtabla1_2 = tabla1.idtabla1 AND 
tabla2.idtabla1_1 = tabla1.idtabla1
estás diciendo que el idtabla1_1 y el idtabla1_2 SEAN IGUALES, cosa que nunca sucede... matemáticamente estarías diciendo lo siguiente

Código:
A = B y C = B por lo tanto A = C
No estoy seguro de qué es lo que quieres obtener como resultado, pero veamos si esto te sirve. Al tener una REFERENCIA DOBLE en tu tabla2 (es decir dos campos distintos apuntando hacia la tabla1) debes usar DOS VECES LA TABLA1 utilizando un alias, para poder hacer cada join por separado.

Checa este script:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM Tabla1;
  2. +----------+--------+
  3. | idtabla1 | nombre |
  4. +----------+--------+
  5. |        1 | oscar  |
  6. |        2 | Carlos |
  7. +----------+--------+
  8. 2 rows in set (0.00 sec)
  9.  
  10. mysql> SELECT * FROM Tabla2;
  11. +----------+------------+------------+-----------+
  12. | idtabla2 | idtabla1_1 | idtabla1_2 | nombre    |
  13. +----------+------------+------------+-----------+
  14. |        1 |          2 |          1 | oscarzito |
  15. |        2 |          1 |          2 | marko     |
  16. |        3 |          2 |          1 | yo        |
  17. |        4 |          1 |          2 | el        |
  18. +----------+------------+------------+-----------+
  19. 4 rows in set (0.00 sec)
  20.  
  21. mysql> SELECT
  22.     -> T2.idtabla2, T2.nombre,
  23.     -> T1A.idTabla1, T1A.nombre,
  24.     -> T1B.idTabla1, T1B.nombre
  25.     -> FROM tabla2 T2
  26.     -> INNER JOIN tabla1 T1A ON T2.idtabla1_1 = T1A.idtabla1
  27.     -> INNER JOIN tabla1 T1B ON T2.idtabla1_2 = T1B.idtabla1
  28.     -> ORDER BY idtabla2;
  29. +----------+-----------+----------+--------+----------+--------+
  30. | idtabla2 | nombre    | idTabla1 | nombre | idTabla1 | nombre |
  31. +----------+-----------+----------+--------+----------+--------+
  32. |        1 | oscarzito |        2 | Carlos |        1 | oscar  |
  33. |        2 | marko     |        1 | oscar  |        2 | Carlos |
  34. |        3 | yo        |        2 | Carlos |        1 | oscar  |
  35. |        4 | el        |        1 | oscar  |        2 | Carlos |
  36. +----------+-----------+----------+--------+----------+--------+
  37. 4 rows in set (0.00 sec)

Observa que la tabla1 se usa dos veces con los alias (T1A y T1B). Si esto no es lo que necesitas por favor dinos qué es lo que esperas de salida a partir de tus datos.




Leo.


MUCHAS GRACIAS LEO!!

ESO ES LO QUE QUIERO QUE SALGA PERO ALGO MAS PRECISO

Código MySQL:
Ver original
  1. +----------+-----------+----------+--------+----------+--------+
  2. | idtabla2 | nombre    | nombre | nombre |
  3. +----------+-----------+----------+--------+----------+--------+
  4. |        1 | oscarzito | Carlos | oscar  |
  5. |        2 | marko      | oscar | Carlos |
  6. |        3 | yo        | Carlos| oscar  |
  7. |        4 | el         | oscar | Carlos |
  8. +----------+-----------+----------+--------+----------+--------+

QUIERO QUE MI TABLA QUEDE DE ESA MANERA..
PERDONEN MI IGNORANCIA SOY NUEVO EN ESTO VOY EN LA PRIMERA SEMANA DE CLACES INTRODUCTORIA CON MySQL y me dio esta curiosidad!
Gracias de antemano!


Etiquetas: inner-join, key, pimary, select, tabla, foreignkey
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 17:55.