2017-07-05 1 views
1
#StandardSQL 
WITH tableA AS (
SELECT ["T001", "T002", "T003"] AS T_id, [1, 5] AS L_id 
UNION ALL 
SELECT ["T008", "T009"] AS T_id, NULL AS L_id 
) 

SELECT * FROM tableA, UNNEST(L_id) AS unnest 

Verwendung Wenn ich diesen Code excuted, ich das Ergebnis erwartet wie unter.Google BigQuery, verlor ich null Zeile, wenn ‚UNNEST‘ Funktion

RowNumber T-id   L-id unnest 
1   T001,T002,T003 1,5 1 
2   T001,T002,T003 1,5 5 
3   T004,T005  NULL NULL 

Aber ich unter Ergebnis bekommen ...

RowNumber T-id   L-id unnest 
1   T001,T002,T003 1,5 1 
2   T001,T002,T003 1,5 5 

Ich verlor dritte Reihe. Dann sah ich Google Official Dokumentation. Es wurde so geschrieben.

Aber ich möchte meine Null-Zeile nicht verlieren.

Wie kann ich null Zeile halten?

Bitte sagen Sie mir Lösung ...

Antwort

2

Statt CROSS JOIN, verwenden Sie LEFT JOIN. Dadurch wird eine Zeile mit Nullen für ein leeres Array zurückgegeben. Sie könnten auch interessiert sein an die working with arrays topic aus der Dokumentation.

#StandardSQL 
WITH tableA AS (
    SELECT ["T001", "T002", "T003"] AS T_id, [1, 5] AS L_id 
    UNION ALL 
    SELECT ["T008", "T009"] AS T_id, NULL AS L_id 
) 
SELECT * FROM tableA 
LEFT JOIN UNNEST(L_id) AS value; 
+0

Hallo Elliott, sieht aus wie das Schlüsselwort 'unnest' ist reserviert, bekam die Nachricht" Unerwartetes Schlüsselwort UNNEST ". Vielleicht muss es vom "Zeichen" umgeben sein oder "unnest_" heißen. –

+0

Vielen Dank, dass Sie darauf hingewiesen haben. Ich habe es jetzt behoben. –

+0

Danke, Elliott !! Ich tue nur wie du sagst, und ich könnte ein Ergebnis bekommen, das ich will. –