Java SQL查询返回具有多个同名列的结果集的可能性

Java SQL查询返回具有多个同名列的结果集的可能性,java,sql,oracle,resultset,Java,Sql,Oracle,Resultset,来自oracle文档 在某些情况下,SQL查询可能返回结果集 具有多个同名列的。如果列名称为 作为getXXX方法的参数,getXXX将返回该值 第一个匹配列名的名称 有人知道“某些情况”吗?这里有一个常见的例子: SELECT * FROM table1 JOIN table2 ON table1.table1Id = table2.table1Id; 这里您知道table1和table2有一个名为table1Id的列,它保证具有相同的值。但是,如果您有自联接: SELECT * FROM

来自oracle文档

在某些情况下,SQL查询可能返回结果集 具有多个同名列的。如果列名称为 作为getXXX方法的参数,getXXX将返回该值 第一个匹配列名的名称


有人知道“某些情况”吗?

这里有一个常见的例子:

SELECT * FROM table1 JOIN table2 ON table1.table1Id = table2.table1Id;
这里您知道
table1
table2
有一个名为
table1Id
的列,它保证具有相同的值。但是,如果您有自联接:

SELECT * FROM employee e JOIN employee m ON e.manager_id = m.id;

现在您遇到了一个问题,您的结果集可能没有那么有意义。

下面是一个常见的示例:

SELECT * FROM table1 JOIN table2 ON table1.table1Id = table2.table1Id;
这里您知道
table1
table2
有一个名为
table1Id
的列,它保证具有相同的值。但是,如果您有自联接:

SELECT * FROM employee e JOIN employee m ON e.manager_id = m.id;
现在您遇到了一个问题,您的结果集可能没有那么有意义。

最简单的情况是

select 1 as A, 2 as A from dual
与在复杂查询中(不情愿地)创建相等别名的方式大致相同。

最简单的情况是

select 1 as A, 2 as A from dual

与某些人可能(不情愿)在复杂查询中创建相等别名的方式大致相同。

想象两个表定义为

  • 作者:作者,名字,姓氏,标题
  • 图书:书号,书名,ISBN,作者
您可以使用下面的SQL列出包含作者信息的书籍

SELECT *
FROM Books
JOIN Authors USING (AuthorId)

现在,在
结果集中有两个不相关的
标题
列,一个是本书的标题,另一个是作者的(例如学术)标题。

想象两个表定义为

  • 作者:作者,名字,姓氏,标题
  • 图书:书号,书名,ISBN,作者
您可以使用下面的SQL列出包含作者信息的书籍

SELECT *
FROM Books
JOIN Authors USING (AuthorId)

现在,您在
结果集中有两个不相关的
标题
列,一个是书的标题,另一个是作者的(例如学术)标题。

连接两个具有公共列名的表。连接两个具有公共列名的表。使用Join查询应该只返回一个table1Id列。谢谢!我已经纠正了这个例子。但是值得注意的是,至少在PostgreSQL上,USING()不会立即删除重复的列,因此对于两个不同的联接,不能在相同的列名上使用USING()(这就是为什么我认为它没有)。JOIN USING查询应该只返回一个table1Id列。谢谢!我已经纠正了这个例子。但是值得注意的是,至少在PostgreSQL上,USING()不会立即删除重复的列,因此对于两个不同的联接,不能将USING()放在相同的列名上(这就是为什么我认为它没有这样做的原因)。