2016-05-13 11 views
1

In Ordnung, ich habe eine Abfrage hier. (Verwenden von Oracle SQL Developer)Abfragen der Datenbank für Join-Tabellen

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

Das bin ich in meiner Datenbank jeden Tisch bekommt, die eine Spalte ID1 oder eine Spalte hat ID2. Lassen Sie uns sagen, ich habe eine Reihe von Join-Tabellen, mit ID1 und ID2 verbunden in einer bestimmten Tabelle, aber ID1 und ID2 sind in vielen separaten Tabellen.

Wie würde ich diese Abfrage einrichten, um verschiedene TABLE_NAME s zu wählen, die beide COLUMN_NAME s drin haben? IE, Abfrage ID1 und ID2 gibt eine JOIN_TABLE1 zurück, aber ID1 und ID3 gibt nur JOIN_TABLE2 zurück, ich bekomme keine gemeinsamen Tabellen, die NUR das eine oder das andere haben.

+0

I 'nehme an, ist COLUMN_NAME' ein Tippfehler ? –

Antwort

1

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

Eine gute, unkomplizierte Lösung. Es gibt jedoch ein Semikolon zu viele. –

+0

@ThorstenKettner Semikolon entfernt ... (Kopieren und Einfügen zu schnell) ... Danke – scaisEdge

0

Die gängigste Methode ist Ihre Reihen zu aggregieren und zählen, so dass Sie Zugriff auf die Tabelle nur einmal:

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