2014-05-15 43 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有效名稱。