我有一个名为 schemas
的表,它有:
- unique_id (varchar) - 包含表名
- 数据(文本)
schemas
行上的每个 unique_id
都有一个包含相似列的表,例如:users
(id, data), 假期
(id,数据)等。
是否可以从这些表中查询而无需逐个输入?
CREATE TABLE schemas (
unique_id VARCHAR(32) PRIMARY KEY, // table names stored here
data TEXT
);
INSERT INTO schemas VALUES('users','foo'),('holidays','bar');
-- not just users and holidays, there are many more..
CREATE TABLE users (
id BIGSERIAL,
data TEXT
);
INSERT INTO users(data) VALUES('user1'),('user2');
CREATE TABLE holidays (
id BIGSERIAL,
data TEXT
);
INSERT INTO holidays(data) VALUES('hol1'),('hol2');
-- and so on, if a record added to the schemas,
-- a new table created with unique_id name
是否可以在没有 PL/*
的情况下进行单个查询,从而得到如下结果:
schema_unique_id | schema_data | table_data
users | foo | user1
users | foo | user2
holidays | bar | hol1
holidays | bar | hol2
最佳答案
如果没有动态 SQL,通常是不可能的。但是,对于您指定的用例,可以使用 inheritance 来实现:
CREATE TABLE schemas (
unique_id VARCHAR(32) PRIMARY KEY,
data TEXT
);
INSERT INTO schemas VALUES('users','foo'),('holidays','bar');
CREATE TABLE mydata (
id BIGSERIAL,
data text
);
CREATE TABLE users ( ) INHERITS (mydata);
INSERT INTO users(data) VALUES('user1'),('user2');
CREATE TABLE holidays ( ) INHERITS (mydata);
INSERT INTO holidays(data) VALUES('hol1'),('hol2');
SELECT s.unique_id, s.data as schema_data, d.data as table_data
FROM schemas s, mydata d, pg_class
WHERE d.tableoid = pg_class.oid AND s.unique_id = pg_class.relname;
unique_id | schema_data | table_data
-----------+-------------+------------
holidays | bar | hol1
holidays | bar | hol2
users | foo | user1
users | foo | user2
(4 rows)
SELECT
来自父表的操作导致 PostgreSQL UNION
父表的行与每个子表的那些继承列的查询。
如果你的表已经与继承模型兼容,你可以ALTER
它们来引入它:
ALTER TABLE users INHERIT mydata;
关于sql - 从表中存储表名的表中查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28454103/