我目前有几个不同类型的项目表。每个表都有不同的列,它们都继承了主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;
答案 0 :(得分:0)
查询规划器需要知道要读取哪些表,以及最终结果中包含哪些列,所以我认为不会有任何单个查询可以说“如果是Y,则包括列X,但是列Z如果不是“。
我能想到的最好的是LEFT JOIN
所有子表,因此您的结果集包含所有可能的列,但大多数列都是NULL
。