gpt4 book ai didi

java - ResultSetMetaData.getColumnName 为 UNION 和非 UNION 查询返回不同的值

转载 作者:行者123 更新时间:2023-11-30 23:01:47 25 4
gpt4 key购买 nike

使用 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 的任何方法获得它。

我们将不胜感激。

最佳答案

您看到这些结果是因为它是 UNION 查询。这样的查询完全有可能做类似的事情

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

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

由于 UNION 查询结果集中的任何列都可以从多个底层列派生,getColumnName 只能返回有效 该列的名称,在上面的示例中为 Field1

关于java - ResultSetMetaData.getColumnName 为 UNION 和非 UNION 查询返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23679324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com