Sql 查询数据库中的联接表

Sql 查询数据库中的联接表,sql,oracle-sqldeveloper,Sql,Oracle Sqldeveloper,好的,我有一个问题。(使用Oracle SQL Developer) 这将获取数据库中具有列ID1或列ID2的每个表。假设我有许多联接表,ID1和ID2联接在一个特定的表中,但是ID1和ID2也在许多单独的表中 如何设置此查询以选择同时包含列名称s的不同表名称s?也就是说,查询ID1和ID2会返回一个JOIN\u TABLE1,但是ID1和ID3只返回JOIN\u TABLE2,我不会得到只有一个或另一个的共享表。您可以使用intersect SELECT OWNER, TABLE_NAME

好的,我有一个问题。(使用Oracle SQL Developer)

这将获取数据库中具有列
ID1
或列
ID2
的每个表。假设我有许多联接表,
ID1
ID2
联接在一个特定的表中,但是
ID1
ID2
也在许多单独的表中

如何设置此查询以选择同时包含
列名称
s的不同
表名称
s?也就是说,查询
ID1
ID2
会返回一个
JOIN\u TABLE1
,但是
ID1
ID3
只返回
JOIN\u TABLE2
,我不会得到只有一个或另一个的共享表。

您可以使用intersect

SELECT OWNER, TABLE_NAME 
FROM ALL_TAB_COLUMNS, COLUMN_NAME 
WHERE COLUMN_NAME = 'ID1'
INTERSECT 

SELECT OWNER, TABLE_NAME 
FROM ALL_TAB_COLUMNS, COLUMN_NAME 
WHERE COLUMN_NAME = 'ID2';

最常见的方法是汇总行数和计数,因此只需访问表一次:

select owner, table_name 
from all_tab_columns
where column_name in ('id1', 'id2');
group by owner, table_name
having count(*) = 2;

我想,
,COLUMN\u NAME
是一个打字错误?一个很好的直截了当的解决方案。但是,分号过多。@ThorstenKettner分号已删除。。。(复制和粘贴太快)。。。谢谢
select owner, table_name 
from all_tab_columns
where column_name in ('id1', 'id2');
group by owner, table_name
having count(*) = 2;