使用Java JDBC,我想收集从SQL Select查询返回的信息。
如果我在SQL查询下面触发:
SELECT col1 AS 'Field1', col2 AS 'Field2' FROM Table;
然后,使用resultSetMetaData.getColumnName(1),我得到'col1'作为结果,这是预期的结果。
现在,问题是,当我加入2个SQL表时(因为,MySQL不提供Full Outer Join,因此,我解除了以下查询)
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'作为结果,其中,我预期'col1'。
我也试过了resultSetMetaData.getColumnLabel(1),但它仍然返回'Field1'。
我希望'col1'作为结果,我无法通过resultSetMetaData的任何方法获得。
对此的任何帮助都会很明显。
答案 0 :(得分:0)
您正在查看这些结果,因为它是UNION查询。这样的查询完全有可能做类似
的事情SELECT Col1 AS Field1 FROM Table1
UNION
SELECT Col2 AS Field1 FROM Table2
在这种情况下,如果getColumnName
尝试返回结果中基础列的名称,则没有单一的“正确”答案:它应该返回“Col1”还是“Col2”?
由于UNION查询的结果集中的任何列都可以从多个底层列派生,因此getColumnName
只能返回有效名称该列,在上例中为Field1
。