問題:
從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中文網其他相關文章!