【问题标题】:PostgreSQL unnest, WHERE clause on specific element of nested fieldPostgreSQL unnest,嵌套字段特定元素的 WHERE 子句
【发布时间】:2020-07-16 20:50:51
【问题描述】:

鉴于下表,我想提取 id 值 WHERE 60 显示为 status 的第二个元素。我看到它是一个嵌套字段。其中,我如何获得第二个元素?

╔════╤════════════════════════════════════════════════╗
║ id │ status                                         ║
╠════╪════════════════════════════════════════════════╣
║ 1  │  {"(1234,60,\"2020-02-29 01:18:19.309232\")"}  ║
╟────┼────────────────────────────────────────────────╢
║ 2  │  {"(4567,70,\"2020-02-29 01:18:19.309232\")"}  ║
╚════╧════════════════════════════════════════════════╝

结果应该是 id = 1,因为 60 是该行的 status 的第二个元素。

我的同事告诉我值中的不同字段。

  1. user_id (bigint)
  2. status (bigint)
  3. updated_at (timestamp)

【问题讨论】:

  • "我看到它是一个嵌套字段。" - 它的数据类型到底是什么?看起来不像数组,不像 JSON,更像是自定义的字符串格式。
  • @Bergi 我不确定它是什么类型。它被称为“user_status_t[]”。不确定那是什么类型。
  • 啊,那是一个很大的不同! user_status_t 将是 custom composite type。请向我们展示它在您的架构中的定义。
  • 谢谢!我的同事告诉我价值中的不同领域。 1st - user_id (bigint), 2nd - status (bigint), 3rd - updated_at (timestamp) 使用你给我看的文档,我现在知道如何访问它了。谢谢!

标签: postgresql nested unnest


【解决方案1】:

您可以使用. 访问复合类型的各个元素。因此,对您的(非规范化!)表的查询将是

SELECT id
FROM table_name
WHERE (table_name.status).status = 60;

【讨论】:

    猜你喜欢
    • 2020-04-28
    • 2022-12-01
    • 2020-09-29
    • 2014-07-25
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    相关资源
    最近更新 更多