我们有一个方法,它消耗表名并操作列。这个方法以前在MySQL中工作正常,但在postgres中给出空白作为表名。
我提供了一个非常简单的SQL查询,仅用于演示。
在MYSQL中,使用连接参数
我甚至尝试了下面的递归CTE。
我提供了一个非常简单的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));
}
在MYSQL中,使用连接参数
?useOldAliasMetadataBehavior=true
时,它会将表名打印为sub。但在Postgres中,它会打印一个空字符串。我甚至尝试了下面的递归CTE。
with sub as((select * from users2 limit 1)
union (select * from users limit 1)) select * from sub;
问题
- 如何将表名作为别名?在MYSQL中,可以通过参数来控制,那么在Postgres中是否有相应的方式?
- 是否可以更改查询语句中的任何内容,以便结果集元数据返回别名表名称。
请注意,我不想在这里使用视图,这只是一次性使用。我也不能修复基础方法,因为这会导致所有使用代码的代码更改。
有没有快速的方法来解决这个问题?