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 列别名的主要内容,如果未能解决你的问题,请参考以下文章