在BigQuery中,当使用标量子查询(Scalar subquery)时,如果子查询返回多于一个结果,则会出现此错误。
要解决此问题,可以通过进行以下更改来修复查询:
更改标量子查询以确保仅返回一个结果。例如,可以使用聚合函数(如MAX,MIN,AVG等)来限制结果集的大小。
如果不能更改子查询,则可以使用ARRAY函数将多个结果组合成单个数组,并使用标量子查询将其嵌套在外部查询中。
示例:
错误示例:
SELECT name, (SELECT age FROM table_2 WHERE table_2.id = table_1.id) AS age FROM table_1
修复后的示例:
SELECT name, (SELECT MAX(age) FROM table_2 WHERE table_2.id = table_1.id) AS age FROM table_1
另一种修复方式:
SELECT name, (SELECT ARRAY_AGG(age) FROM table_2 WHERE table_2.id = table_1.id) AS ages FROM table_1
请注意,第二个示例使用ARRAY_AGG将多个结果合并到单个数组中。在此示例中,子查询返回一个数组,而不是多个标量元素。