【发布时间】:2020-09-15 10:45:37
【问题描述】:
我有以下 SQL
SELECT CONCAT('method', ' ', r_type, ' ',
r_schema, '.', r_name,
(SELECT
CASE (
SELECT count(*)
FROM myDataset.params
WHERE s_name= 'fileName'
)
WHEN 0 THEN '()'
ELSE
(
SELECT CONCAT('(', STRING_AGG(CONCAT(p_mode, ' ', p_name, ' ', p_type), ', '), ')')
FROM myDataset.params
WHERE s_name = 'fileName'
)
END)
, '\n', r_definition, '\n')
FROM myDataset.routines
WHERE r_name = 'fileName';
它运行以下结果。
method r_type r_schema.r_name(p_mode p_name p_type, ... so on)
r_body
内部查询首先通过检查其计数来检查fileName 是否存在于myDataset.params 中。如果它为零,则返回() 进行连接,否则如果它非零,则对myDataset.params 的所有行执行字符串操作。执行内部查询后,只需执行字符串操作和CONCAT,它的投影为myDataset.routine。
我想问有没有更好的方法(更少的代码)在 BigQuery 中编写这个查询。我的意思是查询正在做它的工作,但仍然。
PS:字符串fileName是一个变量。
【问题讨论】:
标签: sql database google-bigquery