2016-05-13 5 views
1

申し訳ありませんが、私はここで照会しました。結合表のデータベースを照会する

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

これは私のコラムID1または列ID2を持っている私のデータベース内のすべてのテーブルを取得する(OracleのSQL Developerを使用)。私はID1ID2が特定のテーブルに結合されたいくつかの結合テーブルを持っていますが、ID1ID2も多くの別個のテーブルにあります。

このクエリを設定してTABLE_NAMEの中にCOLUMN_NAMEが両方とも含まれるようにするにはどうすればよいですか? 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

良い、簡単な解決策です。しかし、1つのセミコロンが多すぎます。 –

+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; 
関連する問題