tengo tres tablas que me gustaría vincular en esta consulta.MySQL FULL JOIN en una tabla, y LEFT JOIN en otra en la misma consulta?
El script es un registro de asistencia, por lo que registra una marca de asistencia para cada reunión, por usuario.
Las tres tablas utilizadas:
"equipo":
id | fullname | position | class | hidden
1 | Team | -- | black | 1
2 | Dan S | Team Manager | green | 0
3 | Harry P | Graphic Engineer | blue | 0
"registro":
id | mid | uid | mark
1 | 1 | 2 |/
2 | 1 | 3 | I
3 | 2 | 1 |/
4 | 2 | 3 |/
"reuniones":
id | maintask | starttime | endtime
1 | Organise Year Ahead | 1330007400 | 1330012800
2 | Gather Ideas | 1330612200 | 1330617600
3 | TODO | 1331217000 | 1331222400
Hay una muestra de los datos. Lo que quiero hacer es:
Seleccione todos los resultados del registro, agrúpelos por el usuario y ordénelos antes de la hora de inicio de la reunión. Pero, si no hay una marca en la tabla de registro, yo quiero que aparezca "-" (que se puede hacer a través de php si es necesario) Así que un resultado esperado de este modo:
fullname | mark | mid
Dan S |/ | 1
Dan S |/ | 2
Dan S | - | 3
Harry P | I | 1
Harry P |/ | 2
Harry P | - | 3
Mi consulta SQL es esto en el momento:
SELECCIONAR u.
fullname
, u.id
, r.mark
, r.mid
DESDEteam
u UNIRSE POR COMPLETOregister
r ON r.uid
= u.id
UNIRSE A LA IZDAmeetings
m EN r.mid
= m.id
GROUP BY u.id
PEDIDO POR m.starttime
ASC
y me sale un error de vuelta de MySQL:
Usted tiene un error en su sintaxis SQL; revise el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de 'FULL JOIN
register
r ON r.uid
= u.id
IZQUIERDA UNIRSEmeetings
m ON r.mid
= m.`id' at line 1
Pero, no puedo ver un problema con él: S
Por favor, alguien podría ayudar, me punto en la dirección correcta o me da una posible solución a esta. Muy apreciado
Dan
Respuesta: Consulta que trabajaba:
SELECT
u.fullname, u.id as uid,
if(r.uid = u.id, r.mark, '-') as mark,
if(r.uid = u.id, r.mid, '-') as mid,
r.mid, m.starttime
FROM
team u
CROSS JOIN
register r ON u.id = r.uid
LEFT OUTER JOIN
meetings m ON r.mid = m.id
WHERE
u.hidden = 0
GROUP BY
u.id, r.mid
ORDER BY
m.starttime, u.id ASC
Ive lo utilizó en MySQL antes O.o Estoy seguro de que tengo - Tal vez no, puede ser que tenga confunde con LEFT OUTER JOIN o algo así. ¿Qué puedo usar en lugar de la combinación externa completa que hará lo mismo? –
Google para 'simular la combinación externa completa mysql' para algunas soluciones para' FULL OUTER JOIN' que de hecho no existe en mysql. – biziclop
Muchas gracias, CROSS JOIN funcionó a la perfección :) (Por alguna razón no puedo marcar como respuesta aceptada o.O) –