由於後續前面的問題:Postgres的FROM查詢與列名的一個
我有以下查詢:
SELECT row_number() OVER (ORDER BY t.id) AS id
, t.id AS "RID"
, count(DISTINCT a.ord) AS "Matches"
FROM tbl t
LEFT JOIN (
unnest(array_content) WITH ORDINALITY x(elem, ord)
CROSS JOIN LATERAL
unnest(string_to_array(elem, ',')) txt
) a ON t.description ~ a.txt
OR t.additional_info ~ a.txt
GROUP BY t.id;
這給了我匹配正確,但現在array_content
的值需要是動態的,並且也是列值之一。
比方說,我使用的是聚合函數來獲取查詢作爲內數組內容:
SELECT row_number() OVER (ORDER BY t.id) AS id
, t.id AS "RID"
, array_agg(DISTINCT demo_a.element_demo) as array_values
, count(DISTINCT a.ord) AS "Matches"
, count(DISTINCT demo_a.ord) AS "Demo_Matches"
FROM tbl t
LEFT JOIN (
unnest(array_values) WITH ORDINALITY x(elem, ord)
CROSS JOIN LATERAL
unnest(string_to_array(elem, ',')) txt
) a ON t.description ~ a.txt
OR t.additional_info ~ a.txt
LEFT JOIN (
unnest("test1","test2"::varchar[]) WITH ORDINALITY x(element_demo, ord)
CROSS JOIN LATERAL
unnest(string_to_array(element_demo, ',')) text
) demo_a ON i.name ~ demo_a.text
GROUP BY t.id;
現在我需要的是在地方,那就是在UNNEST部分定義array_content的拿到array_values
列。可能嗎? 現在它給出了一個例外,列名未定義。
增加的雙重UNNEST很簡單陣列'{「測試」,「測試1」}'是沒有意義的。一個單一的'unnest()'已經不是所有的都是unnest ... –
另外,你的兩個LEFT JOIN子查詢之間的代理CROSS JOIN幾乎肯定是錯誤的。考慮fishmarket示例:http://stackoverflow.com/questions/12464037/two-sql-left-joins-produce-incorrect-result/12464135#12464135 –
但@Erwin這2個左連接服務於不同的目的。 –