Ihre Anfrage würde wie folgt sein:
#standardSQL
SELECT game
FROM YourTable
WHERE EXISTS (SELECT 1 FROM UNNEST(participant) WHERE name = 'sam');
Dies gibt alle Spiele, wo 'sam'
ein Teilnehmer war. Hier ist ein in sich geschlossenes Beispiel:
#standardSQL
WITH YourTable AS (
SELECT 'A' AS game, ARRAY<STRUCT<name STRING, age INT64>>[('sam', 12), ('tony', 12), ('julia', 12)] AS participant UNION ALL
SELECT 'B', ARRAY<STRUCT<name STRING, age INT64>>[('sam', 12), ('max', 12), ('jacob', 12)] UNION ALL
SELECT 'C', ARRAY<STRUCT<name STRING, age INT64>>[('sam', 12), ('max', 12), ('julia', 12)]
)
SELECT game
FROM YourTable
WHERE EXISTS (SELECT 1 FROM UNNEST(participant) WHERE name = 'sam');
Wenn Sie die Daten schwenken wollte eine Spalte für jeden Teilnehmer haben, können Sie eine Abfrage wie folgt verwenden:
#standardSQL
CREATE TEMP FUNCTION WasParticipant(
p_name STRING, participant ARRAY<STRUCT<name STRING, age INT64>>) AS (
EXISTS(SELECT 1 FROM UNNEST(participant) WHERE name = p_name)
);
WITH YourTable AS (
SELECT 'A' AS game, ARRAY<STRUCT<name STRING, age INT64>>[('sam', 12), ('tony', 12), ('julia', 12)] AS participant UNION ALL
SELECT 'B', ARRAY<STRUCT<name STRING, age INT64>>[('sam', 12), ('max', 12), ('jacob', 12)] UNION ALL
SELECT 'C', ARRAY<STRUCT<name STRING, age INT64>>[('sam', 12), ('max', 12), ('julia', 12)]
)
SELECT
ARRAY_AGG(IF(WasParticipant('sam', participant), game, NULL) IGNORE NULLS) AS sams_games,
ARRAY_AGG(IF(WasParticipant('tony', participant), game, NULL) IGNORE NULLS) AS tonys_games,
ARRAY_AGG(IF(WasParticipant('julia', participant), game, NULL) IGNORE NULLS) AS julias_games,
ARRAY_AGG(IF(WasParticipant('max', participant), game, NULL) IGNORE NULLS) AS maxs_games
FROM YourTable;
Dieses ein Array zurückgibt mit Spiele für jeden Teilnehmer gespielt.
sollten Sie das tatsächliche Schema Ihrer Tabelle klären! auch - was hast du bisher probiert? Bitte bearbeiten Sie Ihre Frage, um ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) des Codes anzuzeigen, mit dem Sie Probleme haben, und dann können wir versuchen, mit dem spezifischen Problem zu helfen. Sie können auch [Wie Sie fragen] (http://stackoverflow.com/help/how-to-ask) lesen. –