考虑到我们有两个表的情况,假设:SubscriptionPaymentsOrderPayments继承共享表Payments.

有没有办法在表Payments中找出任何记录属于哪个表;换句话说,是否可以指示Payments中的记录是否是SubscriptionPayments without联接的一部分?

编辑:

我已经想过加入、区分大小写,甚至添加一个鉴别符专栏.
必须有一些与继承表及其基表相关的元数据,所以我认为可能有一些元数据指示哪些记录属于哪个表,类似于内置的鉴别器.

推荐答案

是的,有tableoid system column个,就是为了这个:

一百零二 包含此行的表的OID.对于从分区表(请参见Section 5.11)或inheritance hierarchies(请参见Section 5.10)中进行 Select 的查询,该列特别方便,因为如果没有它,就很难判断行来自哪个单独的表.可以将tableoidpg_classoid列联接以获得表名.

Demo:

create table "Payments"(id int);
create table "SubscriptionPayments"() inherits ("Payments");
create table "OrderPayments"() inherits ("Payments");
 
insert into "Payments" select 1;
insert into "SubscriptionPayments" select 2;
insert into "OrderPayments" select 3;
select * from "Payments";

即使请求了all列,Payments中的所有记录似乎也无法区分:

<头> <正文>
id
1
2
3

这是因为默认情况下,除非显式列出,否则系统列是隐藏的,因此您需要在列表中添加tableoid.它是一个oid(可读性不是很好),但可以通过转换为regclass将其转换为实际的表名:

select tableoid, tableoid::regclass, * from "Payments";
<头> <正文>
Tableid Tableid id
16384 "付款" 1
16387 "订阅支付" 2
16390 "OrderPayments" 3

Sql相关问答推荐

在SQL中对字符串进行逻辑排序,将数字部分排序为数字值

Oracle中的分层查询

用于动态查询情况的存储过程常识模式

为什么在postgres中,横向连接比相关子查询快?

使用占位符向SQL INSERT查询添加 case

BigQuery-当子查询不返回任何结果时,所有结果为零

为什么TRY_CONVERT返回一个XML验证错误而不是NULL?

按连续相等值分组排序

SQL JSON_QUERY 使用列中的值构造 json 路径并接收错误

按二维数组的第一个元素排序

如何判断小数点后千位是否不为0

从另一个没有公共键的表中获取值来加入

如何在Hive SQL中分别按多列进行分组?

对于小数据集,EF / SQL 语句花费的时间太长

SQL 中的第一个值和倒数第二个值

如何使用SELECT语句进行左连接,并根据右表中的特定值过滤结果?

如何使用Informix创建一个临时表,将数据从根表导入并使用筛选条件

Snowflake中的动态SQL优化

Postgresql 需要一个查询,为我提供所有没有具有特定状态值的子元素的父母

在 SQL 的每行选项中 Select 最大值