2016-05-23 8 views
-1

Ich möchte eine Abfrage schreiben, die alle Zeilen ausgeben wird, einschließlich der Zeilen, die leere Felder enthalten. Aber meine Abfrage gibt nur Zeilen mit allen nicht leeren Feldern aus.Wie schreibe ich eine SQL-Abfrage, die Zeilen mit leeren Feldern zurückgibt?

Hier ist was ich meine.

So sind diese meine Tabellen Tabelle 1: enter image description here

Tabelle 2 Sponsor: Kontakt enter image description here

Und das ist meine Frage:

SELECT s.sponsor_name, s.sub_name, SUM(s.amount), 
     COUNT(s.id), c.contact_name, c.tel 
FROM  sponsor as s, contact as c 
WHERE (s.id = c.sponsor_id) and (c.is_primary = 1) 
GROUP BY sponsor_name, sub_name 

Hier ist der Ausgang: enter image description here

ich die Ausgabe wollen alle drei Sponsoren wie dies zeigen: enter image description here

+0

MySql oder SQL Server? –

+0

@FelixPamittan mysql – pammmgnwn

Antwort

0
SELECT s.sponsor_name, s.sub_name, SUM(s.amount), 
     COUNT(s.id), c.contact_name, c.tel 
FROM  sponsor as s, contact as c 
WHERE (s.id = c.sponsor_id) and (c.is_primary = 1) 
GROUP BY sponsor_name, sub_name 

Sollte dann am ehesten gelesen:

SELECT s.sponsor_name, s.sub_name, SUM(s.amount), 
     COUNT(s.id), c.contact_name, c.tel 
FROM  sponsor as s 
LEFT JOIN contact as c ON (s.id = c.sponsor_id) and (c.is_primary = 1) 
GROUP BY sponsor_name, sub_name 

Die LEFT JOIN sorgt dafür, dass in diesem Beispiel Sponsor Tabellendaten führt, ist benutzt, um die Zeilen zu behalten.

0

Es ist, weil Sie eine INNER JOIN machen, die nicht übereinstimmende Zeilen ablegt. Sie müssen LEFT JOIN verwenden:

SELECT 
    s.sponsor_name, 
    s.sub_name, 
    SUM(s.amount), 
    COUNT(s.id), 
    c.contact_name, 
    COALESCE(c.tel, 'N/A') AS tel 
FROM sponsor AS s 
LEFT JOIN contact AS c 
    ON s.id = c.sponsor_id 
    AND c.is_primary = 1 
GROUP BY s.sponsor_name, s.sub_name 

Darüber hinaus sollten Sie die explizite JOIN Syntax anstelle der alten Stil-Syntax werden.

0
SELECT s.sponsor_name, s.sub_name, SUM(s.amount), 
     COUNT(s.id), c.contact_name, c.tel 
FROM  sponsor as s 
Left join contact c on (s.id = c.sponsor_id) and (c.is_primary = 1) 

WHERE (c.sponsor_id is null) 
GROUP BY sponsor_name, sub_name 

Versuchen Sie dies. Oder wenn es nicht in Ordnung ist, dann versuchen, sql zu schreiben, wo die Überprüfung durch null

Verwandte Themen