我有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中实现这一点。
答案 0 :(得分:3)
Oracle SQL Developer可以做到这一点。
编写*查询,将鼠标放在'*'
上SQL Developer提供将其分解为完全限定列列表,单击蓝色文本。
的Ta-DA。
不要忘记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()
。
希望这有帮助。