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?
Réponses:
En utilisant
information_schema
Il s'agit de la manière de se conformer au SGBDR croisé conforme aux normes.
Vous pouvez voir cela documenté
la source
INFORMATION_SCHEMA
, par notre propre @AaronBertrand ( sqlblog.com/blogs/aaron_bertrand/archive/2011/11/03/… )information_schema.columns
depuis 2006. Une décennie entière avant même de les implémenter. Si Microsoft SQL ne prend pas en charge la norme, nous devrions peut-être envisager de les harceler. D'autres le font.Pour IBM DB2, vous utiliseriez les éléments suivants:
Notez que dans DB2, les noms de colonnes seront en majuscules, sauf s'ils ont été définis à l'intérieur de guillemets doubles avec autre chose que des majuscules. Ensuite, vous devez également fournir le boîtier exact du nom de la colonne.
la source
WHERE UPPER(colname) = 'COLUMN_NAME'
.La requête ci-dessous devrait vous donner ce que vous recherchez:
Si vous recherchez des colonnes d'un nom exact, remplacez simplement la
WHERE
clause par:la source
dans Teradata 15:
la source
Oracle sql / plsql:
la source
Veuillez transmettre le nom de la colonne à cette variable:
$COLUMN_NAME
la source
// Sélectionnez la table particulière:
la source
Pour SQL Server:
la source