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 Puntos30650

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)

1voto

top21tk comentado

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

Muchas gracias.

0voto

magarzon comentado

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

1voto

top21tk comentado

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.

1voto

top21tk comentado

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.

1voto

magarzon comentado

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

1voto

top21tk comentado

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.

2votos

top21tk comentado

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.

2votos

magarzon comentado

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.

2votos

top21tk comentado

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.

Otras Preguntas y Respuestas


...

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

Conecta