web-dev-qa-db-fra.com

Comment écrire une requête pour rechercher toutes les tables d'une base de données qui ont un nom de colonne spécifique

J'ai une base de données avec environ 100 tables et j'ai besoin de construire une requête de jointure pour obtenir des données spécifiques de deux d'entre elles. Je connais l'un mais pas l'autre. Fondamentalement, j'ai besoin de quelque chose comme:

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

Comment puis-je faire ceci?

12
Joe Essey

En utilisant information_schema

Il s'agit de la manière de se conformer au SGBDR croisé conforme aux normes.

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

Vous pouvez voir cela documenté

21
SqlSandwiches

Pour IBM DB2, vous utiliseriez les éléments suivants:

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

Notez que dans DB2, les noms de colonne seront en majuscules sauf ils ont été définis à l'intérieur de guillemets doubles avec autre chose que des majuscules. Ensuite, vous devez également fournir la casse exacte du nom de la colonne.

5
Chris Aldrich

La requête ci-dessous devrait vous donner ce que vous recherchez:

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%';

Si vous recherchez des colonnes d'un nom exact, remplacez simplement la clause WHERE par:

where c.name = 'ColumnSearchText';
3
Thomas Stringer

Oracle sql/plsql:

select table_name from all_tab_columns where column_name='yourcolumnname';
0
Tim Chaubet

dans 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
Boris N.
SELECT * FROM _v_sys_columns WHERE COLUMN_NAME='$COLUMN_NAME'

Veuillez transmettre le nom de la colonne à cette variable: $COLUMN_NAME

0
Yasim