我有一个表来存储表名(我们称之为“CUSTOM_TABLES”)。 我有一个表来注册数据跟踪(称之为“消费”)。 我有用户创建的表,我不知道它的名字(在运行时创建),因此,系统创建表(执行DDL)并将其名称存储在“CUSTOM_TABLES”中。现在可以称之为“USER_TABLE”。
当在表“USER_TABLE”中生成数据时,我在跟踪表(“CONSUMPTIONS”)中注册数据的行ID和“CUSTOM_TABLES”中找到的“USER_TABLE”的ID。
现在,我需要找一个消耗,数据是什么表和哪一行。请记住:在“CONSUMPTIONS”表中,我只有一个ID(FK)指向“CUSTOM_TABLES”。
CREATE TABLE consumptions
(
id_consumption serial NOT NULL,
id_row integer,
id_table integer
)
CREATE TABLE custom_tables
(
id_table serial NOT NULL,
description character varying(250),
name character varying(150)
)
我需要的查询是:
select * from consumptions c
join insurance i on c.id_row = i.index_id
在这种情况下,“保险”是“USER_TABLE”。 但我不知道“保险”。我需要使用它的ID在“CUSTOM_TABLES”中找到它。
select name from custom_tables where
id_table = consumption.id_table
最终查询必须是:
select * from consumptions c
join
(select name from custom_tables t where t.id_table = c.id_table) i
on c.id_row = i.index_id
我保证“user_tables”具有“index_id”属性作为其PK。 我更喜欢不使用功能。