特定の列名を持つデータベース内のすべてのテーブルを検索するクエリを作成する方法


12

約100のテーブルを持つデータベースがあり、2つのテーブルから特定のデータを取得するために結合クエリを作成する必要があります。私はどちらかを知っていますが、もう一方は知りません。基本的に私は次のようなものが必要です:

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

これどうやってするの?


6
私の答えはSQL Serverを想定しています。使用しているのはRDBMSですか?
Thomas Stringer 2013年

回答:


21

使用する information_schema

これは、標準に準拠したクロスRDBMSによる方法です。

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

あなたはこれを文書化して見ることができます


5
INFORMATION_SCHEMAたち自身の@AaronBertrand(sqlblog.com/blogs/aaron_bertrand/archive/2011/11/03/…)を使用しない理由
Thomas Stringer

2
@ThomasStringer同意するが、OPは質問にdbmsタグを付けていない。
ypercubeᵀᴹ

@ThomasStringer実際のデータベースをすぐに使用PostgreSQLはinformation_schema.columns2006年以降、Identityカラムをサポートしています。実装するまでの10年間です。Microsoft SQLが標準をサポートしていない場合は、おそらく標準を検討する必要があります。他の人はします。
エヴァンキャロル

5

IBM DB2の場合、以下を使用します。

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

DB2では、列名は大文字以外で二重引用符内に定義されていない限り、大文字になります。次に、列名の正確な大文字と小文字も指定する必要があります。


1
列が引用符を使用して定義されている場合(回避する必要があります)、UPPER関数またはUCASE関数を使用して、colnameを大文字に変換できますWHERE UPPER(colname) = 'COLUMN_NAME'
Lennart 2017年

3

以下のクエリは、あなたが探しているものを与えるはずです:

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

正確な名前の列を探している場合は、WHERE句を次のように置き換えます。

where c.name = 'ColumnSearchText';

0

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

列名をこの変数に渡してください: $COLUMN_NAME


-3

// 特定のテーブルを選択します:

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

あなたはおそらくOPの質問を読み間違え、あなたの答えは尋ねられた質問に答えません。
Lennart 2016年

-3

SQL Serverの場合:

SELECT name 
FROM sysobjects 
WHERE id IN 
( 
    SELECT id 
    FROM syscolumns 
    WHERE name = 'EXACT_COLUMN_NAME_TO_SEARCH'
)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.