Benutzer mit den meisten Antworten
Datenbank nach Spaltenname durchsuchen in allen Tabellen

Frage
-
Hallo :)
Ich habe folgendes Problem: Ich muss eine DB mit ca 250 Tabellen durchsuchen, und zwar nach einer Spalte. Ich habe keine Ahnung in welcher Tabelle sich diese Spalte befindet und müsste deshalb gleich die komplette DB durchsuchen. Ich bin jetzt schon seit geraumer Zeit am googeln, konnte aber keine Lösung für mich entdecken.
Ich sag jetzt schonmal Danke! für eure Hilfe.
Grüße, Simon
============================= EDIT =============================
Ich bin nun doch endlich selber auf eine Lösung gekommen. Hier ist meine Lösung:
SELECT TABLE_NAME, COLUMN_NAME
FROM datenbank.INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'Spalte, nach der gesucht wird'
ORDER BY TABLE_NAME
- Bearbeitet cH33zBurGer Donnerstag, 14. November 2013 09:43 Lösung gefunden
Antworten
-
invalid identifier"
Wenn Du eine Unterabfrage verwendest, muss Du ein Alias angeben, sonst gibt es so eine Fehlermeldung
select table_name from (select table_name from dba_tab_columns where COLUMN_NAME = 'Tabelle A') AS myAlias where COLUMN_NAME = 'Tabelle B';
Wenn Du Tabellen finden willst, die beide Felder enhält, musst Du die Anzahl der gefundenen zählen und darauf filtern, das geht einer Gruppierung und der HAVING Klausel; in diesem Beispiel für 3 gesuchte Fehler.
select table_name from dba_tab_columns where COLUMN_NAME IN ('gesuchte Spalte ein', 'gesuchte Spalte zwei', 'gesuchte Spalte zwei') GROUP BY table_name HAVING COUNT(*) = 3
Olaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort vorgeschlagen Stefan FalzModerator Mittwoch, 14. Februar 2018 11:09
- Als Antwort markiert Stefan FalzModerator Samstag, 31. März 2018 19:09
-
- Als Antwort markiert Stefan FalzModerator Samstag, 31. März 2018 19:10
-
Hi,
Oracle ist nicht Access oder SQL Server. Die SQL Syntax unterscheidet sich teils schon erheblich.
Probier es mal so:
SELECT table_name FROM dba_tab_columns WHERE COLUMN_NAME IN ('Spalte Eins', 'Spalte Zwei') AND LENGTH ( table_name ) <= 3 GROUP BY table_name HAVING count(*) = 2
Ansonsten am besten in einem Forum fragen, dass sich mit Oracle und dessen SQL Statements befasst.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Stefan FalzModerator Samstag, 31. März 2018 19:10
Alle Antworten
-
Jemand eine Idee was man ändern müsste wenn man nach mehreren WHERE-Bedingungen suchen möchte?
z.B. eine Tabelle die zwei bestimmte Spalten hat?
Das war meine Idee, leider ohne erfolg.
select table_name
from dba_tab_columns
where COLUMN_NAME = 'gesuchte Spalte ein' and COLUMN_NAME = 'gesuchte Spalte zwei';Gruß
- Bearbeitet PumpEE Mittwoch, 18. Oktober 2017 11:53
-
AND Logik geht natürlich nicht, eine Spalte kann nicht gleichzeitig zwei verschiedene Namen haben.
Entweder mit OR verknüpfen oder den IN Operator verwenden
select table_name from dba_tab_columns where COLUMN_NAME IN ('gesuchte Spalte ein', 'gesuchte Spalte zwei', 'gesuchte Spalte zwei')
Olaf Helper
[ Blog] [ Xing] [ MVP] -
Danke für die Antwort und natürlich haben Sie Recht.
Allerdings bekomme ich immer noch nicht das gewünschte Ergebnis. Ich beschreibe mal mein Anliegen:
Ich suche Tabellen die beiden Spalten haben A und B. Wenn ich den IN Operator benutze bekomme ich zu viele Treffer, es werden mir auch Tabellen angezeigt die entweder oder haben und natürlich auch die die beide haben.
Würde eine Unterabfrage gehen? z.B:
select table_name
from (select table_name from dba_tab_columns where COLUMN_NAME = 'Tabelle A')
where COLUMN_NAME = 'Tabelle B';Leider funktioniert das nicht bei mir, Fehlermeldung ist:
ORA-00904: "COLUMN_NAME": ungültiger Bezeichner
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Fehler in Zeile: 15 Spalte: 9Haben Sie eine Idee?
-
invalid identifier"
Wenn Du eine Unterabfrage verwendest, muss Du ein Alias angeben, sonst gibt es so eine Fehlermeldung
select table_name from (select table_name from dba_tab_columns where COLUMN_NAME = 'Tabelle A') AS myAlias where COLUMN_NAME = 'Tabelle B';
Wenn Du Tabellen finden willst, die beide Felder enhält, musst Du die Anzahl der gefundenen zählen und darauf filtern, das geht einer Gruppierung und der HAVING Klausel; in diesem Beispiel für 3 gesuchte Fehler.
select table_name from dba_tab_columns where COLUMN_NAME IN ('gesuchte Spalte ein', 'gesuchte Spalte zwei', 'gesuchte Spalte zwei') GROUP BY table_name HAVING COUNT(*) = 3
Olaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort vorgeschlagen Stefan FalzModerator Mittwoch, 14. Februar 2018 11:09
- Als Antwort markiert Stefan FalzModerator Samstag, 31. März 2018 19:09
-
Danke auf hier für.
Mit GROUP BY und HAVING hat das super funktioniert. Jetzt würde ich gerne das Ergebnis noch weiter filtern wollen und zwar durch eine Unterabfrage.
select table_name
from (select table_name
from dba_tab_columns
where COLUMN_NAME IN ('Spalte Eins', 'Spalte Zwei')
group by table_name
HAVING count (*) = 2) AS myAlias
where LENGTH (table_name) <= 3 ;Hier habe ich, wie oben schon gezeigt, ein Alias gesetzt, aber Ich bekomme hier folgenden Fehler:
ORA-00933: SQL-Befehl wurde nicht korrekt beendet
00933. 00000 - "SQL command not properly ended"
*Cause:
*Action:
Fehler in Zeile: 17 Spalte: 5(Das Alias wird "rot" Unterstrichen)
Leider habe ich keine Idee was ich hier ändern könnte.
- Bearbeitet PumpEE Donnerstag, 19. Oktober 2017 08:48
-
Hi,
Oracle ist nicht Access oder SQL Server. Die SQL Syntax unterscheidet sich teils schon erheblich.
Probier es mal so:
SELECT table_name FROM dba_tab_columns WHERE COLUMN_NAME IN ('Spalte Eins', 'Spalte Zwei') AND LENGTH ( table_name ) <= 3 GROUP BY table_name HAVING count(*) = 2
Ansonsten am besten in einem Forum fragen, dass sich mit Oracle und dessen SQL Statements befasst.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Stefan FalzModerator Samstag, 31. März 2018 19:10
-
- Als Antwort markiert Stefan FalzModerator Samstag, 31. März 2018 19:10