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

Imposible relacionar 2 veces con la misma tabla!!

Estas en el tema de Imposible relacionar 2 veces con la misma tabla!! en el foro de Mysql en Foros del Web. Hola, tengo 2 tablas con esta relacion: Código: Salto Archivo ======= ============== id id titulo nombre idarchivo1 tipo idarchivo2 idarchivo1 y idarchivo2 tiene relacion con ...
  #1 (permalink)  
Antiguo 16/02/2014, 16:39
 
Fecha de Ingreso: noviembre-2013
Mensajes: 6
Antigüedad: 10 años, 5 meses
Puntos: 0
Pregunta Imposible relacionar 2 veces con la misma tabla!!

Hola, tengo 2 tablas con esta relacion:
Código:
Salto                             Archivo
=======                      ==============
id                                   id
titulo                              nombre
idarchivo1                     tipo
idarchivo2
idarchivo1 y idarchivo2 tiene relacion con el id de la tabla Archivo.

El problema es que no consigo hacer funcionar la siguiente consulta mas que para ver las primeras 2 columans, el resto de las columnas no muestran nada:

Código:
SELECT 
  t1.id, 
  t1.titulo, 
  t2.nombre as nom1, 
  t3.nombre as nom2, 
  t2.tipo as tipo1, 
  t3.tipo as tipo2
FROM 
  Salto t1, 
  Archivo t2, 
  (
    SELECT 
      nombre, 
      tipo 
    FROM 
      Archivo 
    WHERE 
      Salto.idarchivo2=id 
  ) t3 
WHERE 
  t1.idarchivo1=Archivo.id
Lo separe en lineas para que se pueda entender, gracias por cualquier ayuda que me puedan dar.
Si me dan la respuesta cuanto antes mejor ya que me come mucho la cabeza y no puedo mas.
  #2 (permalink)  
Antiguo 16/02/2014, 17:33
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, 5 meses
Puntos: 2658
Respuesta: Imposible relacionar 2 veces con la misma tabla!!

Estás cerca, pero no lo estás haciendo bien:

Código SQL:
Ver original
  1. SELECT
  2.   S.id,
  3.   S.titulo,
  4.   A1.nombre nom1,
  5.   A2.nombre nom2,
  6.   A1.tipo tipo1,
  7.   A2.tipo tipo2
  8. FROM
  9.   Salto S
  10.   INNER JOIN Archivo A1 ON S.idarchivo1 = A1.id
  11.   INNER JOIN Archivo A2 ON S.idarchivo2 = A2.id
__________________
¿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 16/02/2014, 22:16
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Imposible relacionar 2 veces con la misma tabla!!

Cita:
Iniciado por Jinak Ver Mensaje
Hola, tengo 2 tablas con esta relacion:
Código:
Salto                             Archivo
=======                      ==============
id                                   id
titulo                              nombre
idarchivo1                     tipo
idarchivo2
idarchivo1 y idarchivo2 tiene relacion con el id de la tabla Archivo.

El problema es que no consigo hacer funcionar la siguiente consulta mas que para ver las primeras 2 columans, el resto de las columnas no muestran nada:

Código:
SELECT 
  t1.id, 
  t1.titulo, 
  t2.nombre as nom1, 
  t3.nombre as nom2, 
  t2.tipo as tipo1, 
  t3.tipo as tipo2
FROM 
  Salto t1, 
  Archivo t2, 
  (
    SELECT 
      nombre, 
      tipo 
    FROM 
      Archivo 
    WHERE 
      Salto.idarchivo2=id 
  ) t3 
WHERE 
  t1.idarchivo1=Archivo.id
Lo separe en lineas para que se pueda entender, gracias por cualquier ayuda que me puedan dar.
Si me dan la respuesta cuanto antes mejor ya que me come mucho la cabeza y no puedo mas.
Me gusta el nombre del post, imposible jajajajajajaja
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 17/02/2014, 11:39
 
Fecha de Ingreso: noviembre-2013
Mensajes: 6
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Imposible relacionar 2 veces con la misma tabla!!

@gnzsoloyo
Tampoco funciona, devuelve el valor "0" en el campo 3 y 4.
  #5 (permalink)  
Antiguo 17/02/2014, 11:46
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Imposible relacionar 2 veces con la misma tabla!!

entonces revisa tus datos con el ejemplo que pones y algunos datos se obtiene lo siguiente:

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. id INT IDENTITY(1,1),
  4. titulo VARCHAR(20),
  5. idarchivo INT,
  6. idarchivo2 INT
  7. )
  8.  
  9. CREATE TABLE #temp2
  10. (
  11. id INT IDENTITY(1,1),
  12. nombre VARCHAR(20),
  13. tipo VARCHAR(20)
  14. )
  15.  
  16. INSERT INTO #temp VALUES ('Mio',1,2)
  17. INSERT INTO #temp VALUES ('Mio',3,4)
  18.  
  19. INSERT INTO #temp2 VALUES ('Test1','Testing')
  20. INSERT INTO #temp2 VALUES ('Test2','Testing')
  21. INSERT INTO #temp2 VALUES ('Test3','Testing')
  22. INSERT INTO #temp2 VALUES ('Test4','Testing')
  23.  
  24.  
  25. SELECT t1.id,t1.titulo,t2.nombre,t3.nombre FROM #temp AS t1
  26. LEFT JOIN #temp2 AS t2 ON (t1.idarchivo=t2.id)
  27. LEFT JOIN #temp2 AS t3 ON (t1.idarchivo2=t3.id)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 18/02/2014, 08:49
 
Fecha de Ingreso: noviembre-2013
Mensajes: 6
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Imposible relacionar 2 veces con la misma tabla!!

No se que puede estar mal, sige dando lo mismo, es como si no tomara las subconsultas para crear una nueva tabla. La segunda tabla (incluso con tu ejemplo) tiene todos los datos llenos y no hay lugar para que de un "0", por si acaso aviso que la version usada del servidor de MySQL es 5.1.51, estoy usando la API y la libreria de 5.1.73. Si uso PhpMyAdmin para administrar la Base de Datos puedo ver todos los datos correctamente incluso usando la consulta SQL que me recomendo @gnzsoloyo .

Problemas de version no creo que sea, ya que si hay comunicacion entre PhpMyAdmin y MySQL tambien tendria que haber con la API y la libreria perteneciente al mismo MySQL. :(

EDITO: PhpMyAdmin es la version 4.0.4, usa PHP/5.4.17

Última edición por Jinak; 18/02/2014 a las 08:52 Razón: me olvide mas versiones
  #7 (permalink)  
Antiguo 18/02/2014, 08:53
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, 5 meses
Puntos: 2658
Respuesta: Imposible relacionar 2 veces con la misma tabla!!

Cita:
Iniciado por Jinak Ver Mensaje
No se que puede estar mal, sige dando lo mismo, es como si no tomara las subconsultas para crear una nueva tabla. La segunda tabla (incluso con tu ejemplo) tiene todos los datos llenos y no hay lugar para que de un "0", por si acaso aviso que la version usada del servidor de MySQL es 5.1.51, estoy usando la API y la libreria de 5.1.73. Si uso PhpMyAdmin para administrar la Base de Datos puedo ver todos los datos correctamente incluso usando la consulta SQL que me recomendo @gnzsoloyo .

Problemas de version no creo que sea, ya que si hay comunicacion entre PhpMyAdmin y MySQL tambien tendria que haber con la API y la libreria perteneciente al mismo MySQL. :(


Esa es la metida de pata...

¿Te das cuenta que estás posteando la pregunta en el foro de SQL Server (Microsoft), y no en el ede MySQL (actualmente de Oracle)?

Salvo en modo ANSI-SQL, la sintaxis de las consultas entre los dos DBMS tiene diferencias sustanciales.

Te muevo al foro de MySQL para tratar el problema en el sitio correcto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 18/02/2014, 09:25
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Imposible relacionar 2 veces con la misma tabla!!

No pues asi, si es imposible obtener el resultado deseado jejejejeje
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 18/02/2014, 09:38
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, 5 meses
Puntos: 2658
Respuesta: Imposible relacionar 2 veces con la misma tabla!!

Vovlamos al principio:
Cita:
Iniciado por Jinak Ver Mensaje
(...)
tengo 2 tablas con esta relacion:
Código:
Salto                             Archivo
=======                      ==============
id                                   id
titulo                              nombre
idarchivo1                     tipo
idarchivo2
idarchivo1 y idarchivo2 tiene relacion con el id de la tabla Archivo.

El problema es que no consigo hacer funcionar la siguiente consulta mas que para ver las primeras 2 columans, el resto de las columnas no muestran nada:

Código:
SELECT 
  t1.id, 
  t1.titulo, 
  t2.nombre as nom1, 
  t3.nombre as nom2, 
  t2.tipo as tipo1, 
  t3.tipo as tipo2
FROM 
  Salto t1, 
  Archivo t2, 
  (
    SELECT 
      nombre, 
      tipo 
    FROM 
      Archivo 
    WHERE 
      Salto.idarchivo2=id 
  ) t3 
WHERE 
  t1.idarchivo1=Archivo.id
(...)
Lo que yo te propuse es:
Código MySQL:
Ver original
  1.   S.id,
  2.   S.titulo,
  3.   A1.nombre nom1,
  4.   A2.nombre nom2,
  5.   A1.tipo tipo1,
  6.   A2.tipo tipo2
  7.   Salto S
  8.   INNER JOIN Archivo A1 ON S.idarchivo1 = A1.id
  9.   INNER JOIN Archivo A2 ON S.idarchivo2 = A2.id

Eso debería funcionar en tanto efectivamente haya registros en SALTO que se relacionasen con ARCHIVO por medio de los campos idarchivo1 e idarchivo2, al mismo tiempo
Si uno al menos no se relaciona la mismo tiempo, no saldrá.
En todo caso dinos qué devuelve esto:
Código MySQL:
Ver original
  1.   S.id,
  2.   S.titulo,
  3.   A1.nombre nom1,
  4.   A1.tipo tipo1
  5.   Salto S
  6.   INNER JOIN Archivo A1 ON S.idarchivo1 = A1.id
  7.   S.id,
  8.   S.titulo,
  9.   A2.nombre nom2,
  10.   A2.tipo tipo2
  11.   Salto S
  12.   INNER JOIN Archivo A2 ON S.idarchivo2 = A2.id
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: sql, sql-server
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 02:51.