我有两张不同的桌子。 一张桌子有 70 个 Columes,另一张桌子有 80 个。 我想显示两个表的所有 Columes。 但是有一些 Columes 具有相同的 Columes-name。
例如:
SELECT *
FROM TABLE1 A INNER JOIN
TABLE2 B ON A.ID = B.ID
我想区分 Columes 来自哪个表。
我知道必须明确列出您的列列表并在 SELECT 列表中为它们提供别名。
如何修改我的程序?
有没有其他更简单的方法。
因为字段名太多
答案 0 :(得分:1)
您必须明确列出您的列列表,并在 SELECT 列表中为它们提供别名。
SELECT
A.ID AS A_ID,
B.ID AS B_ID
FROM TABLE1 A INNER JOIN
TABLE2 B ON A.ID = B.ID
作为最佳实践
SELECT *
,始终明确列出所需的列。 Why is SELECT * considered harmful?
答案 1 :(得分:0)
您可以构建查询并让它为您编写查询。没想象中那么难
我已经创建了具有相同列名和托管数据库的表 TEST1 和 TEST2,以列出所有带有前缀的列。
select 'select ' txt from dual
union all
select listagg('t1.' || atc.COLUMN_NAME, ', ') within group (order by atc.COLUMN_NAME) || ', '
from all_tab_cols atc
where table_name = 'TEST1'
union all
select listagg('t2.' || atc.COLUMN_NAME, ', ') within group (order by atc.COLUMN_NAME)
from all_tab_cols atc
where table_name = 'TEST2';
输出是
TXT
----------
select
t1.NUM_COL, t1.TEXT_COL,
t2.NUM_COL, t2.TEXT_COL
因此您可以运行查询,复制输出,然后添加 FROM 和 WHERE 以及您需要的其他部分
答案 2 :(得分:0)
如果唯一的公共列名称使用 JOIN
键,那么您可以将其表述为:
SELECT *
FROM TABLE1 A INNER JOIN
TABLE2 B
USING (ID);
ID
列在结果集中只出现一次。
如果其他列是通用的,那么您需要使用列别名。有时,使用这样的东西很方便:
SELECT A.*, B.col1 as b_col1, B.col2 as b_col2, . . .
FROM TABLE1 A INNER JOIN
TABLE2 B
USING (ID);
为了更简单,您可以使用元数据表。