如何从PostgreSQL中的子表和父表中获取所有列?

时间:2017-11-15 18:36:38

标签: postgresql

我目前有几个不同类型的项目表。每个表都有不同的列,它们都继承了主items表。这是一个简短的例子:

CREATE TABLE items 
(
    id serial,
    name character varying,
    description character varying
)

CREATE TABLE weapons
(
    damage smallint,
    accuracy smallint
) INHERITS (items)

我试图允许用户按名称搜索项目,并获取有关该项目的所有信息,而不仅仅是items表中的列。由于我不知道该项目将在哪个子表中,我不能这样做:

SELECT * FROM ONLY parent NATURAL FULL JOIN child;

有没有办法获取所有子表的所有列而不知道子表是什么?如果没有,那么使这个功能有效的最佳方法是什么?

解决方案

使用以下内容获取原始tabe,然后将其用于查询该表中的所有信息:

SELECT id, tableoid::regclass AS origin FROM items WHERE name = $1;

1 个答案:

答案 0 :(得分:0)

查询规划器需要知道要读取哪些表,以及最终结果中包含哪些列,所以我认为不会有任何单个查询可以说“如果是Y,则包括列X,但是列Z如果不是“。

我能想到的最好的是LEFT JOIN所有子表,因此您的结果集包含所有可能的列,但大多数列都是NULL