Unir dos tablas sin repetir id
Publicado por ichiparanoid (12 intervenciones) el 23/11/2016 17:37:07
Saludos, gente tengo dos tablas, una de puestos y una de servicios que esta relacionada con puestos por una foránea. Necesito que en una fecha dada me muestre una consulta TODOS los puestos y que donde hay servicios muestre la puntuación y donde no la hay muestre cero.
La consulta que muestro a continuación mostraría todos los puestos con un puntaje 0:
Esa tabla devuelve todos los puestos del 47 al 60 (Porque el parámetro es 6 pero podría ser otro)
Esta otra consulta muestra los servicios con su puntuación. La columna puesto_servicio está relacionada con el id de la tabla puestos:
Esa tabla devuelve:
Yo necesito mostrar todos los puestos del 47 al 60 pero que 49, 50, 51 y 52 muestren las puntuaciones en lugar de 0.
Algo así como unir las dos tablas y que los que se repiten muestren el puntaje y los que no se repiten muestren 0.
Yo intenté algo pero los que tienen registro me salen dos veces: Con puntaje y con 0:
Gracias de antemano compañeros.
La consulta que muestro a continuación mostraría todos los puestos con un puntaje 0:
1
2
3
4
5
6
SELECT tbl_puestos.id AS id,
tbl_puestos.nombre AS nombre,
0 AS diurno,
0 AS nocturno
FROM tbl_puestos
WHERE tbl_puestos.sector = 6
Esa tabla devuelve todos los puestos del 47 al 60 (Porque el parámetro es 6 pero podría ser otro)
Esta otra consulta muestra los servicios con su puntuación. La columna puesto_servicio está relacionada con el id de la tabla puestos:
1
2
3
4
5
6
7
8
9
10
11
UNION
SELECT
tbl_puestos.id AS id,
tbl_puestos.nombre AS nombre,
tbl_servicios_prodeco.puntuacion_diurno AS diurno,
tbl_servicios_prodeco.puntuacion_nocturno AS nocturno
FROM tbl_puestos
JOIN tbl_servicios_prodeco
WHERE tbl_puestos.sector = 6
AND tbl_puestos.id = tbl_servicios_prodeco.puesto_servicio
AND tbl_servicios_prodeco.fecha_servicio = '2016-11-21'
1
2
3
4
5
id nombre diurno nocturno
49 P1 CAMBIA VIA # 7 0.9 0.5
50 P2PUENTE PRODECO 0.9 0.5
52 P4 CAMBIA VIA # 12 0.9 0.5
51 P3 PUENTE PARALUZ 0.8 0.9
Yo necesito mostrar todos los puestos del 47 al 60 pero que 49, 50, 51 y 52 muestren las puntuaciones en lugar de 0.
Algo así como unir las dos tablas y que los que se repiten muestren el puntaje y los que no se repiten muestren 0.
Yo intenté algo pero los que tienen registro me salen dos veces: Con puntaje y con 0:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT
tbl_puestos.id AS id,
tbl_puestos.nombre AS nombre,
tbl_servicios_prodeco.puntuacion_diurno AS diurno,
tbl_servicios_prodeco.puntuacion_nocturno AS nocturno
FROM tbl_puestos
JOIN tbl_servicios_prodeco
WHERE tbl_puestos.sector = 6
AND tbl_puestos.id = tbl_servicios_prodeco.puesto_servicio
AND tbl_servicios_prodeco.fecha_servicio = '2016-11-21'
UNION
SELECT
tbl_puestos.id AS id,
tbl_puestos.nombre AS nombre,
0 AS diurno,
0 AS nocturno
FROM tbl_puestos
JOIN tbl_servicios_prodeco
WHERE tbl_puestos.sector = 6
AND tbl_puestos.id <> tbl_servicios_prodeco.puesto_servicio
ORDER BY id ASC
Gracias de antemano compañeros.
Valora esta pregunta


0