4

我有 2 个包含以下字段的表。

表格1

  • AA
  • BB
  • 抄送
  • DD

表2

  • AA
  • 抄送
  • EE

询问

Select t1.*, 
       t2.*
  from table1 t1,
  join table2 t2 on table1.DD = table2.EE

我的数据列返回以下列名称:

AA, BB, CC, DD, **AA_1**, **CC_1**, EE

我不想要这样的列名。我希望他们在公共(或所有列)的名称中添加表名前缀。我可以解决这个问题:

select t1.AA as t1_AA, t1.BB as t1_BB, t1.CC as t1_CC, t1.DD as t1_DD, 
 t2.AA as t2_AA, t2.CC as t2_CC, t2.EE as t2_EEE
   from table1 t1,
    inner join table2 t2
    on table1.DD = table2.EE

但这意味着任何地方的每个选择都会变长 500 行。在 oracle 中有没有神奇的方法来做到这一点?基本上我想写我的代码

 select t1.* as t1_*, t2.* as t2_*
       from table1 t1,
        inner join table2 t2
        on table1.DD = table2.EE

但这当然不是有效的 SQL

4

4 回答 4

5

在 oracle 中有没有神奇的方法来做到这一点?

不是我知道的。您的选择相当于:

  1. 解决列命名方案 - 您需要使用 ALTER TABLE 语句,例如:

    ALTER TABLE table_name
         RENAME COLUMN old_name to new_name;
    
  2. 使用列别名

您可以使用视图来节省定义列别名的工作和精力,但这不是推荐的做法,因为在将视图层叠在一起时性能很差。

于 2010-09-30T17:16:36.537 回答
5

在 OracleSELECT语法中,目前无法根据某个表达式将列别名分配给多个列。您必须为每个单独的列分配一个别名。

于 2010-09-30T19:51:07.243 回答
0

创建视图是一种选择吗?

您正在使用什么软件对您执行此操作?我在 10g 的 SQL*Plus 或 PL/SQL Developer 中看不到这种行为。PL/SQL 不允许您在其中构建具有这种歧义的游标。

于 2010-09-30T19:59:54.200 回答
0

试试这个

 select t1.AA "t1_AA", t2.AA "t2.AA"
 from table1 t1,
 inner join table2 t2
 on table1.DD = table2.EE

正如他之前所说,您需要按列执行

于 2013-02-15T16:42:26.813 回答