Ich habe zwei Tabellen in BigQuery.
Die Tabelle enthält a
Werte in Arrays. Tabelle b
hat Zeile für jeden Wert Ich möchte alle Werte von Tabelle b
nach ID haben, wenn mindestens ein Wert nicht im Array von Tabelle a
mit derselben ID enthalten ist
WITH a as (SELECT 1 as id, ['123', 'abc', '456', 'qaz', 'uqw'] as value
UNION ALL SELECT 2, ['123', 'wer', 'thg', '10', '200']
UNION ALL SELECT 3, null),
b as (SELECT 1 as id, '123' as value
UNION ALL SELECT 1, 'abc'
UNION ALL SELECT 1, '456'
UNION ALL SELECT 1, 'qaz'
UNION ALL SELECT 1, 'uqw'
UNION ALL SELECT 2, '123'
UNION ALL SELECT 2, 'wer'
UNION ALL SELECT 2, '10'
UNION ALL SELECT 3, '200'
UNION ALL SELECT 3, 'thg'
)
Was ist der beste Weg, um es zu machen?
Unten finden Sie Informationen zu BigQuery Standard SQL
#standardSQL
SELECT * EXCEPT(flag)
FROM (
SELECT b.*, COUNTIF(b.value IS NULL) OVER(PARTITION BY id) flag
FROM `project.dataset.table_a` a, a.value
LEFT JOIN `project.dataset.table_b` b
USING(id, value)
)
WHERE flag > 0
AND NOT value IS NULL
Wenn auf Beispieldaten aus Ihrer Frage angewendet werden soll - Ausgabe ist
Row id value
1 2 123
2 2 wer
3 2 10
Falls nach Ihrer Logik auch id = 3 ausgegeben werden soll, verwenden Sie unten
#standardSQL
SELECT * EXCEPT(flag)
FROM (
SELECT b.*, COUNTIF(b.value IS NULL) OVER(PARTITION BY id) flag
FROM `project.dataset.table_a` a LEFT JOIN a.value
FULL OUTER JOIN `project.dataset.table_b` b
USING(id, value)
)
WHERE flag > 0
AND NOT value IS NULL
in diesem Fall ist die Ausgabe
Row id value
1 2 123
2 2 wer
3 2 10
4 3 200
5 3 thg
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen