首页 文章

如何通过表别名选择自定义类型的属性?

提问于
浏览
2

有没有办法通过表别名在PostgreSQL中选择自定义类型列的各个属性?不使用表别名,将列的名称包装在parens中可以正常工作 . 一旦引入了表别名,我的查询就会因语法错误而失败 .

我已经搜索了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...
                     ^

1 回答

  • 2

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

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

相关问题