SQL для отображения нулевых значений - PullRequest
0 голосов
/ 03 мая 2019

У меня есть следующий SQL, который отображает результат подсчета, однако он пропускает строки, в которых ничего нет, я бы хотел, чтобы отображались строки, в которых ничего нет.

Например, id, как это, для отображения Fname, Sname и CName с NULL, даже если нет результата

В настоящее время он должен отображать 115 результатов, поскольку есть 115 пользователей, но он отображает только 57, я предполагаю, что это потому, что он не будет отображать нулевые значения

SELECT  u.Fname, u.Sname , c.CName, COUNT(t.Id)
FROM Table t INNER JOIN User u ON u.UId = t.Id INNER JOIN ComId c ON c.ComId = u.ComId 
WHERE c.ComId LIKE "NAME%"
GROUP BY u.Fname, u.Sname, c.CName;

Спасибо

Ответы [ 2 ]

1 голос
/ 03 мая 2019

Вам нужно left join с. Вы должны начать с таблицы, в которой есть все, что вы хотите. , , которая выглядит как таблица пользователей:

SELECT u.Fname, u.Sname, c.CName, COUNT(t.Id)
FROM User u LEFT JOIN
     Table t 
     ON u.UId = t.Id LEFT JOIN
     ComId c
     ON c.ComId = u.ComId AND c.ComId LIKE 'NAME%'
GROUP BY u.Fname, u.Sname, c.CName;

Как только вы начинаете с LEFT JOIN, обычно последующие объединения также должны быть LEFT (или редко FULL) объединениями. Кроме того, условия в последующих таблицах должны входить в предложение ON, чтобы в предложении WHERE не отфильтровывались «лишние» строки, генерируемые внешним соединением.

0 голосов
/ 03 мая 2019

у вас есть таблица t в качестве основной таблицы (из) и левой таблицы, вы должны использовать только одну, например:

SELECT  u.Fname, u.Sname , t.CName, COUNT(t.Id)
FROM Table t 
LEFT JOIN User u ON u.Id = t.Id 
WHERE t.Name   LIKE "Name%" 
GROUP BY u.Fname, u.Sname, t.CName

, и в конечном итоге вы также можете проверить нулевое значение с помощью ifnull

SELECT  u.Fname, u.Sname , t.CName, ifnull(COUNT(t.Id) ,0) 
FROM Table t 
LEFT JOIN User u ON u.Id = t.Id 
WHERE t.Name   LIKE "Name%" 
GROUP BY u.Fname, u.Sname, t.CName

в любом случае вы должны использовать правильную группу для всех неагрегированных столбцов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...