특정 열 이름을 가진 DB의 모든 테이블을 찾기 위해 쿼리를 작성하는 방법


12

약 100 개의 테이블이있는 데이터베이스가 있고 그중 특정 데이터를 가져 오기 위해 조인 쿼리를 작성해야합니다. 나는 하나는 알지만 다른 것은 알지 못한다. 기본적으로 다음과 같은 것이 필요합니다.

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

어떻게해야합니까?


6
내 대답은 SQL Server로 가정했습니다. 작업중인 RDBMS입니까?
Thomas Stringer 2016 년

답변:


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 년부터 ID 열을 지원 했습니다. 구현하기까지 10 년이 걸렸 습니다. Microsoft SQL이 표준을 지원하지 않는 경우 표준을 살펴보아야 할 것입니다. 다른 사람들도 그렇습니다.
Evan Carroll

5

IBM DB2의 경우 다음을 사용합니다.

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

DB2에서 열 이름은 대문자 이외의 다른 이름 으로 큰 따옴표 안에 정의 되지 않는 한 대문자로되어 있습니다. 그런 다음 열 이름 의 정확한 케이스도 제공해야합니다 .


1
따옴표를 사용하여 정의 된 열 (피해야하는 경우)은 UPPER 또는 UCASE 함수를 사용하여 colname을 대문자로 변환 할 수 있습니다 WHERE UPPER(colname) = 'COLUMN_NAME'.
Lennart

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

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'

이 변수에 열 이름을 전달하십시오 : $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

-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.