oracle sql 列别名

Posted

技术标签:

【中文标题】oracle sql 列别名【英文标题】:oracle sql column alias 【发布时间】:2018-04-23 21:32:54 【问题描述】:

我有 3 个表 A、B、c,我想加入这些表。这些表有共同的列,如 id_no、order_no

我想编写一个查询,返回所有 3 个表中的所有列,列扩展名为 tabA.、tabB.、tabC....我不想手动指定所有列名。这样我就可以区分表中的公共列。

select tabA.id_no, tabA.order_no, tabA....., tabB.id_no, tabB.order_no,tabB..., tabC.id_no, tabC.order_no,tabC..
from A tabA, B tabB, C tabC
where tabA.id_no = tabB.id_no
and tabB.id_no = tabC.id_no

请告诉我如何在 oracle sql 中实现这一点。

【问题讨论】:

请张贴CREATE TABLE 声明。从您的描述中不清楚外键是如何建立的。 如果你说你希望所有列都以它们的表别名作为前缀,那么没有办法做到这一点。 那么,您想在结果集中包含 id_no_tabA、id_no_tabB 等列名吗?抱歉,没有简单的方法可以避免手动单独输入这些名称。如果你的栏目太多,如果你创造性地懒惰(像我一样),你会写一些代码来为你编写代码;这是“元编程”,但没有工具可以直接进行。 【参考方案1】:

Oracle SQL Developer 可以做到这一点。

编写您的 * 查询,将鼠标放在“*”上

SQL Developer 提议将其分解为完全限定的列列表,单击蓝色文本。

塔达。

不要忘记您在 FROM 中的 WHERE 子句或 ANSI 连接,否则您的 DBA 会向您解释什么是笛卡尔积。

如果您的表有外键,SQLDev 也可以生成它。

【讨论】:

【参考方案2】:

您可以执行以下操作:

SELECT tabA.*, tabB.*, tabC.*
  FROM a tabA INNER JOIN b tabB
    ON tabA.id_no = tabB.id_no
 INNER JOIN c tabC
    ON tabB.id_no = tabC.id_no;

编辑

如果您只想获取与三个表关联的列的列表,并查看这三个表中哪些列名是通用的,那么您可以尝试以下操作:

SELECT column_name, COUNT(*), LISTAGG(table_name, ',') WITHIN GROUP ( ORDER BY table_name
  FROM all_tab_columns
 WHERE owner = '<table_owner>'
   AND table_name IN ('A','B','C')
 GROUP BY column_name;

注意LISTAGG() 假设您使用的是 Oracle 11g 或更高版本;在此之前,您可以使用未记录的函数WM_CONCAT()

希望这会有所帮助。

【讨论】:

这使您无法控制结果集中的列名,这似乎是 OP 问题的唯一要点。 也许我误解了他或她在问什么

以上是关于oracle sql 列别名的主要内容,如果未能解决你的问题,请参考以下文章

如何使从 oracle 返回的结果集保持其列别名字符大小写

Oracle字段别名加as与不加的区别

Oracle 别名查询结果

Oracle多表查询与数据更新

Oracle从入门到精通 限定查询和排序查询的问题

Oracle数据库 第二天