Sql 查询数据库中的联接表
好的,我有一个问题。(使用Oracle SQL Developer) 这将获取数据库中具有列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
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;