Come scrivere una query per trovare tutte le tabelle in un db con un nome di colonna specifico


12

Ho un database con circa 100 tabelle e ho bisogno di creare una query di join per ottenere dati specifici da due di essi. Ne conosco uno ma non l'altro. Fondamentalmente ho bisogno di qualcosa come:

select <tables> from <database> where exists table.column name;

Come posso fare questo?


6
La mia risposta ha assunto SQL Server. È il RDBMS con cui stai lavorando?
Thomas Stringer,

Risposte:


21

utilizzando information_schema

Questo è il modo cross-RDBMS conforme agli standard per farlo.

SELECT table_catalog, table_schema, table_name, column_name
FROM INFORMATION_SCHEMA.columns
WHERE column_name = '<your column name>';

Puoi vederlo documentato


5
Perché non usarlo INFORMATION_SCHEMA, con il nostro @AaronBertrand ( sqlblog.com/blogs/aaron_bertrand/archive/2011/11/03/… )
Thomas Stringer,

2
@ThomasStringer Sono d'accordo, ma l'OP non ha taggato la domanda con nessun tag dbms.
ypercubeᵀᴹ

@ThomasStringer Utilizza un vero database, subito dopo PostgreSQL supporta le colonne d'identità nel information_schema.columns2006. Un decennio intero prima ancora di implementarle. Se Microsoft SQL non supporta lo standard, forse dovremmo cercare di assillarli. Altri lo fanno.
Evan Carroll,

5

Per IBM DB2 è necessario utilizzare quanto segue:

select tabschema,tabname from syscat.columns where colname = 'COLUMN_NAME'

Si noti che in DB2, i nomi delle colonne saranno in maiuscolo a meno che non siano stati definiti tra virgolette doppie con qualcosa di diverso da maiuscolo. Quindi devi fornire anche il case esatto del nome della colonna.


1
Se la colonna dove definita utilizzando citazioni (che si devono evitare), è possibile utilizzare la funzione superiore o UCASE per trasformare il colname in maiuscolo: WHERE UPPER(colname) = 'COLUMN_NAME'.
Lennart,

3

La query seguente dovrebbe darti quello che stai cercando:

use YourDatabase;
go

select
    object_schema_name(t.object_id) + '.' + t.name as table_name,
    c.name as column_name
from sys.tables t
inner join sys.columns c
on t.object_id = c.object_id
where c.name like '%ColumnSearchText%';

Se stai cercando colonne con un nome esatto, sostituisci la WHEREclausola con:

where c.name = 'ColumnSearchText';

0

a Teradata 15:

SELECT DATABASENAME||'.'||TABLENAME AS FULL_TABLENAME,
COUNT(1) AS NUMBER_OF_COLUMNS
FROM DBC.COLUMNSV
WHERE 1 = 1
AND COLUMNNAME LIKE '%<YOUR COLUMNNAME HERE>%'
GROUP BY 1

0

Oracle sql / plsql:

select table_name from all_tab_columns where column_name='yourcolumnname';

0
SELECT * FROM _v_sys_columns WHERE COLUMN_NAME='$COLUMN_NAME'

Passare il nome della colonna a questa variabile: $COLUMN_NAME


-3

// Seleziona la tabella Particolare:

SYNTAX:
       SELECT COLUMN_NAME FROM TABLE_NAME WHERE COLUMN_NAME='VALUE';
EXAMPLE:
       SELECT PERSON_NAME FROM PERSON WHERE PERSON_ID=1;

Probabilmente hai letto male la domanda del PO, la tua risposta non risponde alla domanda che è stata posta.
Lennart,

-3

Per SQL Server:

SELECT name 
FROM sysobjects 
WHERE id IN 
( 
    SELECT id 
    FROM syscolumns 
    WHERE name = 'EXACT_COLUMN_NAME_TO_SEARCH'
)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.