首頁 >資料庫 >mysql教程 >將 PostgreSQL 表格與陣列欄位連接時如何保留陣列元素順序?

將 PostgreSQL 表格與陣列欄位連接時如何保留陣列元素順序?

Linda Hamilton
Linda Hamilton原創
2024-12-27 07:49:10793瀏覽

How to Preserve Array Element Order When Joining PostgreSQL Tables with Array Fields?

使用數組類型實現PostgreSQL JOIN 並保留數組元素順序

問題:
從items 表中檢索資料,保持順序特定的some_chosen_data_in_order 表中數組類型欄位中的元素數量行。

嘗試 #1: JOIN

SELECT I.* FROM items AS I
JOIN some_chosen_data_in_order AS S ON I.id = ANY(S.id_items)
WHERE S.id = ?

嘗試 #2: 子查詢

SELECT I.* FROM items AS I
WHERE I.id = ANY
(ARRAY[SELECT S.id_items FROM some_chosen_data_in_order WHERE id = ?])

這些方法都不能保留元素的順序array.

解決方案:

SELECT t.*
FROM unnest(ARRAY[1,2,3,2,3,5]) item_id
LEFT JOIN items t on t.id=item_id

此查詢將數組取消嵌套到各個行中,保留元素順序。然後,它根據 id 欄位將結果項目與項目表連接起來。

示例:

ID items_data
1 {2,4,233,5}

上述查詢將返回以下內容結果:

id data
2 foo
4 bar
233 baz
5 qux

解釋:

unnest 函數將陣列解包到一個表中,每個元素一行。 LEFT JOIN 確保傳回數組中的所有項目,包括那些在項目表中沒有對應行的項目。

以上是將 PostgreSQL 表格與陣列欄位連接時如何保留陣列元素順序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn