Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Usando uma junção com três tabelas quando um campo pode ser nulo


Você está fazendo um INNER JOIN, mas precisa de um OUTER JOIN, em particular, um LEFT JOIN. Com um LEFT JOIN, a tabela "à esquerda" é sempre unida e, se não houver correspondência, os campos da tabela à direita são definidos como nulos. A diferença é explicada muito bem nesta página da Wikipédia .

Então você tem que agrupar as linhas com o mesmo id de envio e contar quantas linhas foram agrupadas, cuidando que se um envio tiver apenas um comentário e outro não tiver nenhum, ambos terão 1 linha agrupada... Se um envio não tiver comentários , na próxima consulta c.submissionid será nulo, então

Seu SQL pode 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

Pode haver erros, não testei a consulta... Mas espero ter te dado a ideia certa, que é a diferença entre junções externas e junções internas.