2016-05-18 6 views
0

Die Felder c.Mcc und c.Mnc in der äußeren Auswahl werden nicht ausgefüllt, obwohl ich diese Felder in bd: RawDebug.CarrierDetails habe.Auswählen von Feldern aus der zweiten Tabelle im linken Join

Jede Hilfe wäre willkommen.

SELECT d.Id, d.DebugReason, d.DebugData, d.d1, d.d2, c.Mcc, c.Mnc 
FROM 
(SELECT 
Id, DebugReason, DebugData, 
INTEGER(SUBSTR(DebugData,0,3)) AS d1, 
SUBSTR(REGEXP_REPLACE(DebugData,'[^a-zA-Z0-9]',' '),4,LENGTH(DebugData)-3) as d2 
FROM TABLE_DATE_RANGE([bd:RawDebug.T],TIMESTAMP('2016-05-16'),TIMESTAMP('2016-05-16')) 
WHERE DebugReason = 50013 and Id = 550661626 LIMIT 50) AS d 
LEFT JOIN 
(
    SELECT Network, Mcc, STRING(Mnc) as Mnc from [bd:RawDebug.CarrierDetails] 
) AS c 
ON c.Mcc = d.d1 and c.Mnc = d.d2 
LIMIT 50 
+0

übereinstimmt, wenn Sie 'linker äußerer Join' verwenden, könnten die Felder in der rechten Tabelle' NULL' sein. Für einen Test sollten Sie 'where c.MCC is not null' vor 'limit 50' hinzufügen und sehen, ob das Ergebnis den Wert –

+0

hat. Es könnte sein, dass Sie diese Felder in den CarrierDetails haben, aber der Join sucht nach Elementen von diesem Auswahl von d, die, wenn ich mich nicht irre, wird durch eine einzige ID begrenzt - 550661626. – Chris

+0

Für ID = 550661626, bekomme ich d.d1 als 310 und d.d2 als 410. In der CarrierDetails Tabelle habe ich einen Eintrag Formular Mcc = 310 und Mnc = 410. Aber ich frage mich, warum c.Mcc und c.Mnc nicht gefüllt werden. – user3447653

Antwort

0

Wenn c.Mcc und c.Mnc sind NULL in den Ergebnissen, noch, dass ein Wert in der Tabelle [bd:RawDebug.CarrierDetails] haben, dann ist die einzige Erklärung ist die LEFT JOIN Kriterien. Sie sollten erneut die Bedingung ON c.Mcc = d.d1 and c.Mnc = d.d2 betrachten und sicherstellen, dass dies wirklich mit Ihren Daten in [bd:RawDebug.CarrierDetails]

Verwandte Themen