【发布时间】:2016-01-04 11:45:29
【问题描述】:
我们有一个使用表名并对列进行操作的方法。此方法以前用于 MySQL,但使用 postgres 将表名设为空白。
我在下面提供了一个非常简单的 SQL 查询,只是为了演示。
select * from ((select * from users2 limit 1)
union (select * from users limit 1)) as sub;
演示获取表名的代码。
try{
connection = DriverManager.getConnection(
connectionURL, dbUserName,
dbPassword);
PreparedStatement psmt = connection.prepareStatement("select * from ((select * from users2 limit 1) union (select * from users limit 1)) as sub");
ResultSet rs = psmt.executeQuery();
ResultSetMetaData metaData = rs.getMetaData();
System.out.println("Table Name");
System.out.println("----------");
System.out.println(metaData.getTableName(1));
}
在连接参数为?useOldAliasMetadataBehavior=true的MYSQL中,它将表名打印为sub。但在Postgres中,它打印出一个空字符串。
我什至尝试了递归 CTE,如下所示。
with sub as((select * from users2 limit 1)
union (select * from users limit 1)) select * from sub;
问题
- 如何获取表名作为别名?在 MYSQL 中它是由一个参数控制的,Postgres 有什么等价的吗?
- 是否可以更改查询中的任何内容,以便结果集元数据返回别名表名称。
请注意,我不想在这里查看视图,这只是一次使用。我也无法修复底层方法,因为它会导致所有使用代码的代码更改。
有什么快速的解决方法吗?
【问题讨论】:
标签: mysql postgresql jdbc