oracle sql列别名

时间:2018-04-23 21:32:55

标签: sql oracle alias

我有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中实现这一点。

2 个答案:

答案 0 :(得分:3)

Oracle SQL Developer可以做到这一点。

编写*查询,将鼠标放在'*'

enter image description here

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

的Ta-DA。

enter image description here

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

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

答案 1 :(得分:0)

您可以执行以下操作:

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;

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

希望这有帮助。