[英]Struct and array - Error: Scalar subquery produced more than one element
我正在嘗試使用結構和數組將兩個表放在一起。 我的想法是對表 A 中的每一行應用 Levenshtein Distance 到表 B。
表一:
col1
whisky
delta
Tango
表B
col1
Whiskey
delta force
Tango is great
期望的輸出:
col1 col2 col3
whisky Whiskey <lv_distance_score>
delta force <lv_distance_score>
Tango is great <lv_distance_score>
delta Whiskey <lv_distance_score>
delta force <lv_distance_score>
Tango is great <lv_distance_score>
Tango Whiskey <lv_distance_score>
delta force <lv_distance_score>
Tango is great <lv_distance_score>
為此,首先我試圖獲得 col1 和 col2 的期望輸出,但我不斷收到error
,指出Scalar subquery produced more than one element
。
我寫的查詢是:
WITH a AS (
SELECT col1, [STRUCT((SELECT col1 FROM table_B))] AS col2 FROM table_A
)
SELECT col1,c2 FROM a,UNNEST(a.col2) AS c2;
我在這里做錯了什么? 我怎樣才能實現我正在尋找的東西?
我有點失落。 為什么不直接使用cross join
?
select a.col1, b.col1
from a cross join
b
如果您希望a
每行一行與 b 的數組,則:
select a.col1, array_agg(b)
from a cross join
b
group by a.col1;
我在這里做錯了什么?
以下是對原始查詢的簡單修復
WITH a AS (
SELECT col1,
[STRUCT(ARRAY(SELECT col1 FROM table_B) as col2)] AS col2
FROM table_A
)
SELECT col1, c2.col2
FROM a, UNNEST(a.col2) AS c2;
雖然上面希望向您展示您的查詢出了什么問題 - 我不確定這是正確的方向。
我怎樣才能實現我正在尋找的東西?
你只需像下面的例子一樣簡單的交叉連接
SELECT a.col1, ARRAY_AGG(b.col1 ORDER BY lv_distance_score(a.col1, b.col1) LIMIT 1)
FROM table_A a
CROSS JOIN table_B b
GROUP BY a.col1
注意:您可以在 SO 上找到大量關於 Levenshtein Distance UDF 的示例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.