entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

como relacionar dos tablas en sql emparejando dos columnas

HOla.

Tengo las siguientes tablas:

tabla LICENCIAS

idtitular
hs
licencia
desde
hasta
idsuplente
iniciosupl
finsupl

tabla PERSONAL

id
NOMBRE
DNI

Quisiera hacer una consulta para llenar la siguiente tabla:

DNI              |   NOMBRE            |  HS         |
-----------------------------------------------------|
DNI TITULAR      |   NOMBRE TITULAR    |  2 hs.      |      
DNI SUPLENTE     |   NOMBRE SUPLENTE   |  2 hs.      |

Ahora estoy haciendo la siguiente consulta sql:

select p.dni, licencias.nombre, licencias.hs from licencias inner join personal  as p on (licencias.idtitular=p.id)

Cómo hago para obtener el dni del suplente, siendo que el id del suplente es otra columna de la tabla licencias?

Desde ya muchas gracias.

1 Respuesta

3votos

magarzon Puntos17460

Hola.

Solo tienes que añadir un left join más a la consulta, para que te dé los datos del suplente (left join porque imagino que puede haber licencias sin suplente, si todas las licencias tienen suplente, puedes hacer un inner join)

select p.dni,p.nombre,  p2.dni as dni_suplente, p2.nombre as nombre_suplente, licencias.hs from licencias inner join personal as p on (licencias.idtitular=p.id) left join personal as p2 on (licencias.idsuplente = p2.id)

top21tk comentado Nov 23, 2016

Me da un error en la consulta.
Ya lo había intentado antes con esa solución, pero no funciona.

Muchas gracias.

magarzon comentado Nov 23, 2016

Y el error que te da cuál es, porque he probado la solución y sí funciona

top21tk comentado Nov 24, 2016

HOla.
No sabía que la flechita debajo tu avatar era para calificar. Pensé que era para ver el resto de la respuesta :(, no se como quitar el -1 perdón.

top21tk comentado Nov 24, 2016

Respecto al error, lo que devuelve es lo siguiente:
error!e

La estructura de las tablas son las siguientes (son del 2004 y nunca las arreglé :/ )

Tabla Licencias

enter image description here

Aclaración:
En la tabla personal no se ve pero tiene un campo numérico DNI.
No utilizo el campo DNI de la tabla licencias.

magarzon comentado Nov 24, 2016

Por una lado, puede que el error sea de sintaxis, ¿qué base datos estás utilizando, MySQL?

De todas formas, estás haciendo el segundo left join mal, además de estar haciendo un inner join, lo estás haciendo otra vez sobre p.id, cuando debería ser sobre p2.id, repasa mi respuesta

top21tk comentado Nov 24, 2016

Es una base ACCESS 2000 que estoy abriendo en access 2010.
Una vez que funcione la consulta sql en access, lo haré funcionar en php.

Reviso y te cuento como va.

Muchas gracias.

top21tk comentado Nov 24, 2016

Esta consulta me da el mismo error:

SELECT p.nombrecompleto, p.dni, p2.dni as dni2 from licencias as u
inner join personal as p on (u.idtitular=p.id)
left join personal as p2 on (u.idsuplente=p.id)
;

Si borro el segundo JOIN funciona, pero no puedo obtener el dni del suplente.

magarzon comentado Nov 24, 2016

Has vuelto a hacer el segundo left join sobre p.id y no sobre p2.id, de todas formas Access es un poco peculiar con los paréntesis y varios joins, prueba esto:

SELECT p.nombrecompleto, p.dni, p2.dni as dni2 from (licencias as u
inner join personal as p on u.idtitular=p.id)
left join personal as p2 on u.idsuplente=p2.id
;

O si no esto:

SELECT p.nombrecompleto, p.dni, p2.dni as dni2 from ((licencias as u
inner join personal as p on u.idtitular=p.id)
left join personal as p2 on u.idsuplente=p2.id))
;

Y asegúrate de que pones el p2.id en el segundo left join, por favor.

top21tk comentado Nov 24, 2016

Genio!
Funcionó la primera, la otra no la probé pero quería avisarte esto urgente.

Muchas gracias!

Veo como anda en php y marco la respuesta.

Saludos

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Actividad Reciente

¿Eres Usuario Apple?

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta