【问题标题】:Possibility of SQL query to return a result set that has more than one column with the same nameSQL 查询返回具有多个同名列的结果集的可能性
【发布时间】:2017-08-11 17:56:51
【问题描述】:

来自 oracle 文档 http://docs.oracle.com/javase/1.5.0/docs/guide/jdbc/getstart/resultset.html

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

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

【问题讨论】:

  • 连接两个具有共同列名的表。

标签: java sql oracle resultset


【解决方案1】:

这是一个常见的例子:

SELECT * FROM table1 JOIN table2 ON table1.table1Id = table2.table1Id;

这里你知道table1table2 有一个名为table1Id 的列,并且保证具有相同的值。但是,如果您有自加入:

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

现在你遇到了一个问题,很可能你的结果集没有多大意义。

【讨论】:

  • JOIN USING 查询应该只返回一个 table1Id 列。
  • 谢谢!我已经纠正了这个例子。但是值得注意的是,至少在 PostgreSQL 上,USING() 不会立即删除重复的列,因此对于两个不同的连接,您不能在同一列名上使用 USING()(这就是我认为没有的原因)。跨度>
【解决方案2】:

想象两个表定义为

  • 作者:AuthorId、FirstName、LastName、Title...
  • 书籍:BookId、Title、ISBN、AuthorId...

希望使用以下 SQL 列出带有作者信息的书籍

SELECT *
FROM Books
JOIN Authors USING (AuthorId)

现在ResultSet 中有两个不相关的title 列,一个是书名,一个是作者的(例如学术)标题。

【讨论】:

    【解决方案3】:

    最简单的情况是

    select 1 as A, 2 as A from dual
    

    与某人可能(不情愿地)在复杂查询中创建相同别名的方式非常相似。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 2012-11-11
      • 2012-10-28
      相关资源
      最近更新 更多