2016-05-13 65 views
1

好的,我在这里有一个查询。 (使用的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 s,其中既有COLUMN_NAME s? IE,查询ID1ID2返回一个JOIN_TABLE1,但ID1ID3只返回JOIN_TABLE2,我没有得到只有一个或另一个的共享表。

+0

我想',COLUMN_NAME'是一个错字? –

回答

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

一个好的,直接的解决方案。然而,有一个分号太多了。 –

+0

@ThorstenKettner分号删除...(复制并粘贴太快)...谢谢 – scaisEdge

0

最常用的方法是收集您的行和计数,所以你访问表只有一次:

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