sql >> Base de Datos >  >> RDS >> Mysql

Usar una unión con tres tablas cuando un campo puede ser nulo

Está haciendo una UNIÓN INTERNA, pero necesita una UNIÓN EXTERNA, en particular, una UNIÓN IZQUIERDA. Con un LEFT JOIN, la tabla "a la izquierda" siempre se une, y si no hay correspondencia, los campos de la tabla a la derecha se establecen en nulo. La diferencia se explica muy bien en esta página de wikipedia .

Luego, debe agrupar las filas con la misma identificación de envío y contar cuántas filas se han agrupado, teniendo cuidado de que si un envío tiene solo un comentario y otro no tiene ninguno, ambos tienen 1 fila agrupada ... Si un envío no tiene comentarios , en la siguiente consulta c.submissionid será nulo, entonces

Su SQL podría ser

SELECT s.loginid, s.title, s.url, s.displayurl, l.username, c.submissionid, 
IF(c.submissionid IS NULL, 0, COUNT(*))  AS countComments
FROM submission AS s
INNER JOIN login AS l ON l.loginid = s.loginid
LEFT JOIN comments AS c ON c.submissionid = s.id
GROUP BY (s.id)
ORDER BY s.datesubmitted DESC
LIMIT 10

Puede haber errores, no he probado la consulta... Pero espero haberte dado la idea correcta, esa es la diferencia entre uniones externas e internas.