2014-05-15 45 views
1

使用Java JDBC,我想收集从SQL Select查询返回的信息。ResultSetMetaData.getColumnName为UNION和非UNION查询返回不同的值

如果我火了下面的SQL查询:

SELECT col1 AS 'Field1', col2 AS 'Field2' FROM Table; 

然后,使用resultSetMetaData.getColumnName(1),我得到 'COL1' 的结果,这是预期的结果。

现在的问题是,当我加入2个SQL表(由于MySQL不提供全外连接,因此,我解雇了下面的查询)

SELECT Table1.Col1 AS 'Field1', Table1.Col3 AS 'Field2', 
Table2.Col5 AS 'Field3',Table2.Col4 AS 'Field4' FROM Table1 
LEFT JOIN Table2 ON Table1.id = Table2.id 
UNION 
SELECT Table1.Col1 AS 'Field1', Table1.Col3 AS 'Field2', 
Table2.Col5 AS 'Field3',Table2.Col4 AS 'Field4' FROM Table1 
RIGHT JOIN Table2 ON Table1.id = Table2.id; 

现在,使用resultSetMetaData.getColumnName(1 ),我得到'Field1'作为结果,其中as,我预计'col1'。

我也尝试resultSetMetaData.getColumnLabel(1),但它仍然返回'Field1'。

我想'col1'作为结果,我无法通过resultSetMetaData的任何方法获取结果。

对此的任何帮助将是可观的。

+0

您是否尝试过在查询中不使用别名? – codiacTushki

回答

0

由于是UNION查询,您将看到这些结果。这是完全可能的,这样的查询可以做类似

SELECT Col1 AS Field1 FROM Table1 
UNION 
SELECT Col2 AS Field1 FROM Table2 

在这种情况下,没有单一的“正确”的答案,如果getColumnName是试图在返回结果的基础列的名称:它应该回归'Col1'或'Col2'?

由于在结果集中UNION查询的任何列可以从多于一个的底层来导出,getColumnName只能返回该列,这是在上面的例子中Field1有效名称。