Mysql
 sql >> Base de données >  >> RDS >> Mysql

Les jointures ne renvoient pas de résultats corrects. Qu'est-ce que je fais mal?

Lorsque vous utilisez des fonctions telles que count, sum, etc., vous devez ajouter une clause group by pour contrôler le regroupement des résultats :

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

MISE À JOUR :

Cette requête modifie les conditions IF pour tester si une ligne correspondante a été trouvée dans certaines des tables jointes à gauche :

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