查询数据库以获取连接表

时间:2016-05-13 20:59:32

标签: sql oracle-sqldeveloper

好的,我在这里有一个查询。 (使用Oracle SQL Developer)

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

这使我的数据库中的每个表都有一列ID1或一列ID2。假设我有一些连接表,ID1ID2加入了一个特定的表,但ID1ID2在很多单独的表中好。

如何设置此查询以选择同时包含TABLE_NAME个的不同COLUMN_NAME? IE,查询ID1ID2会返回JOIN_TABLE1,但ID1ID3仅返回JOIN_TABLE2,我不会获得共享表格只有一个或另一个。

2 个答案:

答案 0 :(得分:1)

您可以使用交叉

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';

答案 1 :(得分:0)

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

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