好的,我在这里有一个查询。 (使用Oracle SQL Developer)
SELECT OWNER, TABLE_NAME FROM ALL_TAB_COLUMNS, COLUMN_NAME WHERE COLUMN_NAME = 'ID1' OR COLUMN_NAME = 'ID2';
这使我的数据库中的每个表都有一列ID1
或一列ID2
。假设我有一些连接表,ID1
和ID2
加入了一个特定的表,但ID1
和ID2
在很多单独的表中好。
如何设置此查询以选择同时包含TABLE_NAME
个的不同COLUMN_NAME
? IE,查询ID1
和ID2
会返回JOIN_TABLE1
,但ID1
和ID3
仅返回JOIN_TABLE2
,我不会获得共享表格只有一个或另一个。
答案 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;