【问题标题】:How do you SELECT attributes of a custom type via a table alias?您如何通过表别名选择自定义类型的属性?
【发布时间】:2016-06-24 12:28:46
【问题描述】:

有没有办法通过表别名在 PostgreSQL 中选择自定义类型列的各个属性?在不使用表别名的情况下,将列名包含在括号中可以正常工作。一旦引入表别名,我的查询就会失败并出现语法错误。

我搜索了 Postgres 文档,但找不到任何说明如何完成此操作的内容。这肯定有可能吗?

CREATE TYPE test_type AS (
    some_text TEXT,
    some_number INTEGER
);

CREATE TABLE test_table (
    id SERIAL PRIMARY KEY,
    some_test test_type NOT NULL
);

INSERT INTO test_table (some_test)
VALUES (ROW('SOME TEXT', 42));

-- This works great

SELECT id, (some_test).some_text, (some_test).some_number
FROM test_table;
┌────┬───────────┬─────────────┐
│ id │ some_text │ some_number │
├────┼───────────┼─────────────┤
│  1 │ SOME TEXT │          42 │
└────┴───────────┴─────────────┘

一旦引入表别名,您就不能选择 自定义类型列中的各个属性

SELECT id, x.(some_test).some_text, x.(some_test).some_number
FROM test_table AS x;

ERROR:  syntax error at or near "("
LINE 1: select id, x.(some_test).some_text, x.(some_test).some_numbe...
                     ^

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    您需要将括号括在别名和列的组合周围:

    SELECT id, (x.some_test).some_text, (x.some_test).some_number
    FROM test_table x;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-07
      • 2013-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 2020-09-17
      • 1970-01-01
      相关资源
      最近更新 更多