我正在尝试使用下表,我们称之为
fields
:
字段名称 | 风险 |
---|---|
全名 | 中 |
电子邮件 | 高 |
地址 | 高 |
ip_地址 | 低 |
创建一个
STRUCT
结构,然后我可以用数据填充该结构。将此视为结构的模式,但我不确定这是否可能?
我想要的是这样的:
STRUCT (
"" AS full_name,
"" AS email,
"" AS address,
"" AS ip_address
)
然后我希望能够使用
CROSS JOIN
将其与数据连接起来并填写现有的数据,但也不确定这是否是正确的方法。
我想创建这些结构,但基于可以更改的预定义模式,而不是逐行编写
SELECT
base_data.id,
-- Not sure how I could use struct_tx.full_name to be updated with value from base_data
FROM base_data
CROSS JOIN struct_tx
这在 SQL 中不是很简单,但你可以尝试这个:
定义结构体
WITH struct_cte AS (
SELECT
STRUCT(
"" AS full_name,
"" AS email,
"" AS address,
"" AS ip_address
) AS empty_struct
)
然后在带有 struct_tx
的
CROSS JOIN中,使用
COALESCE
执行此操作
SELECT
base_data.id,
STRUCT(
COALESCE(base_data.full_name, struct_cte.empty_struct.full_name) AS
full_name,
COALESCE(base_data.email, struct_cte.empty_struct.email) AS email,
COALESCE(base_data.address, struct_cte.empty_struct.address) AS address,
COALESCE(base_data.ip_address, struct_cte.empty_struct.ip_address) AS ip_address
) AS filled_struct
FROM
base_data
CROSS JOIN struct_cte