2017-04-11 20 views
0

beitreten links Ich versuche, um zu sehen, ob ich ein paar nicht verwendete SIP-Nummern haben, so habe ich eine Liste von Zahlen in der Tabelle tmp_numbersMySQL fehlt Ergebnisse

0203XXXXX00 
0203XXXXX01 
0203XXXXX02 
0203XXXXX03 
... 

Die Abfrage ich benutze, ist:

SELECT 
n.number, 
COUNT(c.did) AS count 

FROM tmp_numbers n 

LEFT JOIN cdr c 
ON n.number = c.did 

WHERE c.calldate >= '2017-01-01' 

GROUP BY n.number 
ORDER BY n.number 

Ich bekomme Ergebnisse von der obigen Abfrage, aber es unterlässt Nummern, die es nicht übereinstimmen kann c.did.

Ich hatte den Eindruck, dass ein LEFT passen würde auf der linken Tabelle alles JOIN/Anzeigen (tmp_numbers), unabhängig davon, ob es einen Wert auf der rechten Seite ist (so wird es NULL zeigen?)

Was bin ich hier fehlt?

Antwort

2

Setzen Sie den where Zustand in die left join. Ansonsten stellt sich implizit in eine inner join, weil die Bedingungen in der where Klausel Filter auf alle Daten und wenn calldate NULL ist dann die Bedingung falsch

LEFT JOIN cdr c ON n.number = c.did 
       AND c.calldate >= '2017-01-01' 
0

Sie sind von der JOINED Tabelle auf einer Säule Abfrage, die vielleicht null wenn es kein entsprechender Eintrag, ändern, so dass die Bedingung von WHERE:

WHERE c.calldate >= '2017-01-01'

zu

WHERE c.calldate >= '2017-01-01' OR c.did IS NULL