MySQL - Unir dos tablas sin repetir id

   
Vista:
Imágen de perfil de ichiparanoid

Unir dos tablas sin repetir id

Publicado por ichiparanoid (8 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:

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'
Esa tabla devuelve:

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder