Показывать ноль для столбцов, где нет записей в таблице - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть запрос MySQL, который показывает данные из двух таблиц, объединенных полем project_id. Результаты не отображаются, если в таблице проектов есть запись, но в таблице project_tasks нет записей.

Как отобразить содержимое таблицы проектов, но просто показать нули для любых полей, которые не существуют в таблица project_tasks?

Вот запрос:

SELECT 
    projects.project_id,
    projects.project_name,
    projects.project_description,
    projects.creation_date,
    projects.deadline,
    sitelok.Name AS 'project_manager',
    COUNT(project_tasks.task_id) AS 'total_tasks',
    SUM(CASE
        WHEN project_tasks.status = 'Completed' THEN 1
        ELSE 0
    END) AS 'total_completed',
    SUM(CASE
        WHEN project_tasks.status = 'In Progress' THEN 1
        ELSE 0
    END) AS 'total_in_progress',
    SUM(CASE
        WHEN project_tasks.status = 'Not Started' THEN 1
        ELSE 0
    END) AS 'total_not_started',
    SUM(CASE
        WHEN project_tasks.status = 'Stuck' THEN 1
        ELSE 0
    END) AS 'total_stuck'
FROM
    projects,
    project_tasks,
    sitelok
WHERE
    projects.project_id = project_tasks.project_id
        AND projects.project_manager = sitelok.id
GROUP BY projects.project_id

1 Ответ

1 голос
/ 28 апреля 2020

Вместо выбора из обеих таблиц необходимо выполнить левое соединение с таблицей project_tasks.

Подробнее о левых соединениях здесь.

Ваш запрос будет выглядеть примерно так:

SELECT 
    projects.project_id,
    IFNULL(project_tasks.task_id, 0),
    ...
FROM projects
LEFT OUTER JOIN project_tasks ON project_tasks.project_id = projects.id

Обратите внимание, как я использую IFNULL () , поэтому, если в таблице project_tasks нет подходящей строки, вместо нее будет отображаться 0.

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