簡體   English   中英

結構和數組 - 錯誤:標量子查詢產生多個元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM