繁体   English   中英

Select 当前表名来自 postgresql

[英]Select current table name from postgresql

我有一个由多个子查询组成的查询,这些子查询由UNION ALL组合而成。

SELECT pan_hash, amount FROM humo_txns

UNION ALL

SELECT pan_hash, amount FROM uzcard_txns

LIMIT 10;

但是在检索数据之后,我需要以某种方式找出数据的来源,所以我认为最好将表名(数据的来源)作为一个新列包含在内。

那么有什么办法可以完成这样的事情吗?

SELECT <table_name>, pan_hash, amount FROM humo_txns

UNION ALL

SELECT <table_name>, pan_hash, amount FROM uzcard_txns

LIMIT 10;

您不必对表名进行硬编码。 您可以使用特殊的内置系统列tableoid ,它标识一行来自哪个表。 由于tableoid是一个数字,您需要将其转换为regclass才能看到实际名称:

SELECT tableoid::regclass AS table_name, pan_hash, amount 
FROM humo_txns
UNION ALL
SELECT tableoid::regclass, pan_hash, amount 
FROM uzcard_txns
LIMIT 10;

您可以尝试以下 -

SELECT 'humo_txns', pan_hash, amount FROM humo_txns
UNION ALL
SELECT 'uzcard_txns', pan_hash, amount FROM uzcard_txns
LIMIT 10;

没有内置的 function 可以执行此操作,您必须在每个 select 中手动输入名称

SELECT CAST('humo_txns' AS VARCHAR(64)) AS table_name, pan_hash, amount FROM humo_txns

UNION ALL

SELECT CAST('uzcard_txns' AS VARCHAR(64)) AS table_name, pan_hash, amount FROM uzcard_txns

我建议至少在第一个查询中转换为一个 varchar 字段,该字段的长度足以容纳任何表名。

是的,只需 select 文本文字并为此使用一些列别名:

SELECT 'humo_txns' AS table_name, pan_hash, amount FROM humo_txns
UNION ALL
SELECT 'uzcard_txns' AS table_name, pan_hash, amount FROM uzcard_txns
LIMIT 10;

(这为您提供了从表中所有行中任意选择的十行,就像在您的查询中一样。因此您可以从两个表中获取行或仅从一个表中获取行。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM