2016-08-29 1 views
2

Also habe ich eine Liste von möglichen Spalten, und ich weiß, dass ich überprüfen kann, ob eine bestimmte Spalte existiert.Wie überprüft man, welche Spalten in SQL existieren

SELECT null 
    FROM user_tab_columns 
    WHERE table_name = 'MYTABLE' and column_name = 'MYCOLUMN' 

Wie erweitere ich das, um mehrere Spalten zu testen? d. h. nicht sicher, wie die genaue Syntax aussehen würde.

SELECT null, null, null 
    FROM user_tab_columns 
    WHERE table_name = 'MYTABLE' and column_name = 'MYCOLUMN' 
    or column_name = 'MYCOLUMN1' or column_name = 'MYCOLUMN2' 
+0

Konnte nicht 'DESCRIBE user_tab_columns' verwendet werden? – Angelo

+0

Können Sie klären, was genau Sie vorhaben? Was ist das erwartete Ergebnis hier? – Mureinik

+0

Ich möchte im Grunde nur True oder False drucken, je nachdem, ob die Spalten existieren. Ich bin neu in SQL und ich denke, ich versuche zu verwenden, was ID in Python tun. – SharpObject

Antwort

1

Hier habe ich mit einer einzigen Spalte eine Tabelle erstellt, column_name. Ich teste die Existenz von column_name in der Tabelle EMP im SCOTT Schema. Ich nehme an, dass alle Tabellen-, Spalten- und Schemanamen bereits in Großbuchstaben geschrieben sind (da alle Werte der Katalogzeichenfolge Großbuchstaben sind), andernfalls müssen Sie die Groß- und Kleinschreibung nicht vergleichen. In diesem Beispiel wird davon ausgegangen, dass der aktuelle Benutzer Zugriff auf das Schema SCOTT (ein Standardschema für die meisten Oracle-Installationen) hat und die Tabelle ALL_TAB_COLUMNS anstelle von USER_TAB_COLUMNS (die nur die Tabellen des aktuellen Benutzers verwendet) verwendet.

with 
    potential_columns (column_name) as (
     select 'EMPNO' from dual union all 
     select 'NAME' from dual union all 
     select 'MANAGER' from dual union all 
     select 'DEPTNO' from dual 
    ) 
select p.column_name, 
     case when t.column_name is null then 'FALSE' else 'TRUE' end 
      as column_exists_in_table 
from potential_columns p left outer join 
    (select column_name from all_tab_columns 
     where owner = 'SCOTT' and table_name = 'EMP') t 
on p.column_name = t.column_name 
; 

COLUMN_NAME COLUMN_EXISTS_IN_TABLE 
----------- ---------------------- 
EMPNO  TRUE 
DEPTNO  TRUE 
MANAGER  FALSE 
NAME  FALSE 
1

Vielleicht wird dieser Code nützlich sein (ich bin sicher, es muss eine bessere Lösung):

select count(table_name) from all_tab_columns where column_name = 'YOUR_COLUMN'; 

Für mehr als eine Kolonne dies versuchen:

select count(table_name) from all_tab_columns where column_name in ('YOUR_COLUMN_1','YOUR_COLUMN_2') 

Diese Erträge 0 wenn Tabelle nicht existiert.

Ich hoffe, nützlich sein wird für Sie

+0

Also wenn ich mehrere Spalten Id testen möchte, wie könnte ich es in einer SQL-Anweisung tun? – SharpObject

+0

@SharpObject Ich habe die Antwort bearbeitet, bitte versuchen Sie es mit dem zweiten Beispiel. –

+0

Cool, gibt es einen Weg, ich kann sagen, welche nicht existieren? Da sagt das nur wie viele existieren – SharpObject

0

Jetzt haben Sie die richtige Antwort auf Ihre Anfrage kommt es so etwas wie folgt ausführen würde, als AND mehr Priorität als OR in Oracle SQL hat.

SELECT null, null, null 
    FROM user_tab_columns 
    WHERE (table_name = 'MYTABLE' and column_name = 'MYCOLUMN') <-- MYCOLUMN in MYTABLE 
    or column_name = 'MYCOLUMN1'         <-- MYCOLUMN1 in ANYTABLE 
    or column_name = 'MYCOLUMN2'         <-- MYCOLUMN2 in ANYTABLE 
Verwandte Themen