【问题标题】:UNNEST(ARRAY[]) returning a single row with paranthesisUNNEST(ARRAY[]) 返回带括号的单行
【发布时间】:2022-06-30 16:03:17
【问题描述】:

我正在尝试使用以下 SQL 查询来展平来自 UI 的字符串列表

@Query(value = "INSERT INTO mydb.temp select unnest(array[:myList])  ", nativeQuery = true)
    public void findrows(
        @Param("myList") List<String> myList) throws MDBServiceException;

我得到的结果是这样的:

| id       | 
| -------- | 
| (A01,B01)|

相反,我希望我的结果是这样的:

| id  | 
| --- | 
| A01 | 
| B01 | 

我也在尝试json_array_text_elements,但没有运气。非常感谢任何帮助。

【问题讨论】:

  • 您想要实现的目标看起来与扁平化列表相反。您希望每个元素插入一个,对吗?
  • @FedericoklezCulloca mylist 有超过 50k 的值。所有这些值都应该在不同的行中,是的,列表中的每个元素插入一行
  • 为什么不单独传递每个myList 条目?
  • @XtremeBaumer 此代码是 API 的一部分,它将获取插入的记录并提供另一个值。单独实现每个 myList 可能会导致网关时间错误

标签: java postgresql hibernate jpa


【解决方案1】:

应在 FROM 子句中使用设置返回函数(如 unnest)。并且 INSERT 语句应始终指定为其提供值的目标列:

INSERT INTO mydb.temp (col1, col2, col3)
select c1, c2, c3
from unnest(array[:myList]) as u(c1, c2, c3)

【讨论】:

    猜你喜欢
    • 2015-11-23
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2012-02-04
    相关资源
    最近更新 更多