Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verknüpfungen geben keine korrekten Ergebnisse zurück. Was mache ich falsch?

Wenn Sie Funktionen wie count, sum usw. verwenden, müssen Sie eine group by-Klausel hinzufügen, um die Gruppierung der Ergebnisse zu steuern:

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

AKTUALISIERUNG:

Diese Abfrage ändert die IF-Bedingungen, um zu testen, ob in einigen der links verknüpften Tabellen eine übereinstimmende Zeile gefunden wurde:

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