Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 带有Postgres JDBC的表名别名_Mysql_Postgresql_Jdbc - Fatal编程技术网

Mysql 带有Postgres JDBC的表名别名

Mysql 带有Postgres JDBC的表名别名,mysql,postgresql,jdbc,Mysql,Postgresql,Jdbc,我们有一个使用表名并对列进行操作的方法。该方法以前使用MySQL,但在postgres中表名为blank 我在下面提供了一个非常简单的SQL查询,只是为了演示一下 select * from ((select * from users2 limit 1) union (select * from users limit 1)) as sub; 用于演示获取表名的代码 try{ connection = DriverManager.getConnection(

我们有一个使用表名并对列进行操作的方法。该方法以前使用MySQL,但在postgres中表名为blank

我在下面提供了一个非常简单的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有什么等价物吗
  • 可以更改查询中的任何内容,以便结果集元数据返回别名表名称
请注意,我不想在这里查看,这只是一次性使用。我也无法修复底层方法,因为它会对所有使用的代码进行代码更改


有什么快速的方法可以解决这个问题吗?

ResultSetMetaData.getTableName不应该返回表的别名,它应该返回实际的源表名(如果可用)。这也是为什么在MySQL中需要显式使用
useldaliasMetadataBehavior=true
来获取此信息的原因


从JDBC规范的角度来看,PostgreSQL的行为更好。联合不能有列的表名,因为结果集中单个列中的值可能来自完全不同的表。据我所知,PostgreSQL无法返回您期望的信息。

谢谢您提供的信息。它返回的是一个空字符串,不是空字符串,我将在问题中编辑它。因此,postgres的行为更好,必须说服我的队友。