Ниже приведен способ «исправить» ваш запрос (изменение только в последней строке)
#standardSQL
WITH users AS (
SELECT "micheleId" AS userId, "Michele" AS name UNION ALL
SELECT "matteoId", "Matteo"
),
profiles AS (
SELECT "x" AS profileId, 'users, micheleId, profiles, x' AS path, 'player' AS type UNION ALL
SELECT "y", 'users, micheleId, profiles, y', 'coach' UNION ALL
SELECT "z", 'users, matteoId, profiles, z', 'team'
)
SELECT userId, profileId, type
FROM users
JOIN profiles
ON users.userId IN UNNEST(SPLIT(REPLACE(profiles.path, ' ', '')))
Зависит от вашего реального варианта использования - могут быть варианты выше, как показано ниже
ON users.userId IN UNNEST(SPLIT(profiles.path, ', '))
ИЛИ
ON users.userId IN UNNEST(SPLIT(REGEXP_REPLACE(profiles.path, r'\s', '')))
... и т. Д.
Во всех вышеуказанных случаях - результат
Row userId profileId type
1 micheleId x player
2 micheleId y coach
3 matteoId z team
Плохо, я ошибочно добавил строку пути. Правильный формат: «пользователи», «micheleId», «профили», «x» как обновлено в вопросе
Ниже приведено "исправление" для этого
#standardSQL
WITH users AS (
SELECT "micheleId" AS userId, "Michele" AS name UNION ALL
SELECT "matteoId", "Matteo"
),
profiles AS (
SELECT "x" AS profileId, '"users", "micheleId", "profiles", "x"' AS path, 'player' AS type UNION ALL
SELECT "y", '"users", "micheleId", "profiles", "y"', 'coach' UNION ALL
SELECT "z", '"users", "matteoId", "profiles", "z"', 'team'
)
SELECT userId, profileId, type
FROM users JOIN profiles
ON users.userId IN UNNEST(SPLIT(REGEXP_REPLACE(profiles.path, r'[" ]', '' )))
с, очевидно, тем же результатом
Row userId profileId type
1 micheleId x player
2 micheleId y coach
3 matteoId z team
как видите - та же идея исправления