2016-03-18 6 views
0

Ich habe die folgende Abfrage und ich bin beitreten Tasks_triggers_evidence.MySQL Join, um Daten zu erhalten, aber Zeilen nicht ausschließen

Ich möchte den Wert des Felds evidence_accepted erhalten.

Aber leider schließt es alle Zeilen aus, wenn es keine Übereinstimmungen gibt. Ich möchte, dass es die Ergebnisse zurückgibt, aber mit einem NULL für evidence_accepted.

So Join um Daten zu greifen, aber grundsätzlich keine Ergebnisse auszuschließen. Wie mache ich das?

SELECT o.task_id, o.task_link, SUM(t.trigger_conversions), SUM(t.trigger_reward) AS reward, e.evidence_accepted 
FROM tasks AS o 
INNER JOIN advertisers AS a 
ON a.advertiser_id = o.task_advertiser_id 
INNER JOIN tasks_triggers AS t 
ON o.task_id = t.trigger_task_id 
LEFT JOIN tasks_triggers_evidence AS e 
ON e.evidence_trigger_id = t.trigger_id 
WHERE o.task_approved = 1 AND o.task_deleted = 0 AND o.task_paused = 0 AND t.trigger_removed = 0 AND e.evidence_account_id = ? 
AND a.advertiser_balance > 0 
GROUP BY o.task_id 
ORDER BY reward DESC 
+0

Bewegen Sie den 'e.evidence_account_id' Filter auf den' JOIN' Zustand. –

Antwort

1

schreiben Zustand e.evidence_account_id = ? nicht in WHERE Abschnitt, aber in LEFT JOIN:

SELECT o.task_id, o.task_link, SUM(t.trigger_conversions), SUM(t.trigger_reward) AS reward, e.evidence_accepted 
FROM tasks AS o 
INNER JOIN advertisers AS a 
    ON a.advertiser_id = o.task_advertiser_id 
INNER JOIN tasks_triggers AS t 
    ON o.task_id = t.trigger_task_id 
LEFT JOIN tasks_triggers_evidence AS e 
    ON e.evidence_trigger_id = t.trigger_id AND e.evidence_account_id = ? 
WHERE o.task_approved = 1 
AND o.task_deleted = 0 
AND o.task_paused = 0 
AND t.trigger_removed = 0 
AND a.advertiser_balance > 0 
GROUP BY o.task_id 
ORDER BY reward DESC 
+0

Das funktioniert perfekt und ich fühle, dass ich etwas gelernt habe !!! VIELEN DANK –

Verwandte Themen