有没有办法通过表别名在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...
^
答案 0 :(得分:2)
您需要将括号括在别名和列的组合中:
SELECT id, (x.some_test).some_text, (x.some_test).some_number
FROM test_table x;