【问题标题】:How do I select all the columns from a table, plus additional columns like ROWNUM?如何从表中选择所有列,以及 ROWNUM 等其他列?
【发布时间】:2011-04-29 07:23:32
【问题描述】:

在 Oracle 中,可以执行 SELECT 语句,将行号作为结果集中的列返回。

例如,

SELECT rownum, column1, column2 FROM table

返回:

rownum column1 column2 1 乔·史密斯 2 鲍勃·琼斯

但我不想手动指定每一列。我想做类似的事情:

select rownum,* from table
rownum column1 column2 column3 column4 1乔史密斯1 2 2鲍勃·琼斯3 4

有什么想法吗?

【问题讨论】:

    标签: sql oracle select


    【解决方案1】:

    用表名限定 *:

    select rownum, table.* from table
    

    【讨论】:

    • 添加此注释以供将来参考:如下面的 Pierre Cattin 所示,这不适用于别名。因此,如果您使用别名,则需要使用别名而不是表名。 select rownum, table_name.* from table_nameselect rownum, t.* from table_name t
    【解决方案2】:

    Dave 的回答很棒,我想补充一点,也可以通过将通配符作为第一列来做到这一点:

    select *,rownum from table
    

    有效,但以下无效:

    select rownum,* from table
    

    我已经在 MySQL 上进行了测试。

    【讨论】:

    • "在 MySQL 上测试" - 不使用表名 (table.*) 这将不适用于提出此问题的 Oracle。
    • 仍然无法在 Oracle 19c 上运行,出现错误 ORA-00923: FROM keyword not found where expected。接受的答案虽然有效。
    【解决方案3】:

    不幸的是,我不认为有办法做到这一点,最简单的可能是使用 id,count(*) 的内联表与自身进行内部连接,并放置一个外部选择语句

    【讨论】:

      【解决方案4】:

      戴夫的回答在 Oracle 11g 上对我不起作用(表。* 没有别名)。以下工作:

      select rownum, t.* from table t
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-23
        • 1970-01-01
        • 2012-01-23
        • 1970-01-01
        • 1970-01-01
        • 2013-07-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多