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?
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é
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.
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';
Oracle sql/plsql:
select table_name from all_tab_columns where column_name='yourcolumnname';
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
SELECT * FROM _v_sys_columns WHERE COLUMN_NAME='$COLUMN_NAME'
Veuillez transmettre le nom de la colonne à cette variable: $COLUMN_NAME