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

As junções não retornam resultados corretos. O que estou fazendo errado?


Ao usar funções como contagem, soma, etc., você precisa adicionar uma cláusula group by para controlar o agrupamento dos resultados:
select 
    concat(u.first_name, ' ', u.last_name) as name, 
    u.skill, 
    ut.name as team_name,
    (count(if(a.tech_id = u.user_id AND a.qc_id = 0 AND a.status = 2,1,0))) AS assigned_scopes,
    (count(if(a.tech_id = u.user_id  AND a.qc_id > 0 AND a.status = 3,1,0))) AS assigned_qa,
    (count(if(a.assignment_id=o.assignment_id and a.tech_id = u.user_id  AND a.status = 2 AND a.qc_id = 0 and o.class_id= 3,1,0))) AS assigned_canvass,
from am_ts_order o 
left join am_ts_assignment a
    ON a.assignment_id=o.assignment_id
left join am_user u
    ON a.tech_id=u.user_id
left join user_team ut
    ON u.user_team_id = ut.user_team_id
where u.user_role_id = 15
    and u.user_team_id = ut.user_team_id
order by u.first_name asc
group by a.tech_id

ATUALIZAÇÃO:

Esta consulta altera as condições IF para testar se uma linha correspondente foi encontrada em algumas das tabelas unidas à esquerda:
select 
    concat(u.first_name, ' ', u.last_name) as name, 
    u.skill, 
    ut.name as team_name,
    count(if(
        (NOT a.tech_id IS NULL) AND 
        (NOT u.user_id IS NULL) AND 
        a.qc_id = 0 AND 
        a.status = 2,1,0)) AS assigned_scopes,
    count(if(
        (NOT a.tech_id IS NULL) AND 
        a.qc_id > 0 AND 
        a.status = 3,1,0)) AS assigned_qa,
    count(if(
        (NOT a.assignment_id IS NULL) AND
        a.assignment_id = o.assignment_id AND 
        a.tech_id = u.user_id AND 
        a.status = 2 AND 
        a.qc_id = 0 AND 
        o.class_id= 3,1,0)) AS assigned_canvass,
from am_ts_order o 
left join am_ts_assignment a
    ON a.assignment_id=o.assignment_id
left join am_user u
    ON a.tech_id=u.user_id
left join user_team ut
    ON u.user_team_id = ut.user_team_id
where u.user_role_id = 15
    and u.user_team_id = ut.user_team_id
order by u.first_name asc
group by a.tech_id