Cara menulis kueri untuk menemukan semua tabel dalam db yang memiliki nama kolom tertentu


12

Saya punya database dengan sekitar 100 tabel dan saya perlu membuat permintaan bergabung untuk mendapatkan data spesifik dari dua tabel tersebut. Saya tahu satu tetapi tidak yang lain. Pada dasarnya saya butuh sesuatu seperti:

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

Bagaimana saya bisa melakukan ini?


6
Jawaban saya diasumsikan SQL Server. Apakah itu RDBMS yang Anda kerjakan?
Thomas Stringer

Jawaban:


21

Menggunakan information_schema

Ini adalah cara RDBMS lintas standar untuk melakukannya.

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

Anda dapat melihat ini didokumentasikan


5
Mengapa tidak menggunakan INFORMATION_SCHEMA, oleh @AaronBertrand milik kami sendiri ( sqlblog.com/blogs/aaron_bertrand/archive/2011/11/03/… )
Thomas Stringer

2
@ThomasStringer Saya setuju tetapi OP belum memberi tag pertanyaan dengan tag dbms.
ypercubeᵀᴹ

@ThomasStringer Gunakan database nyata, langsung PostgreSQL mendukung Kolom Identitas information_schema.columnssejak tahun 2006. Satu dekade penuh sebelum bahkan mengimplementasikannya. Jika Microsoft SQL tidak mendukung standar, mungkin kita harus melihat mengomel mereka. Yang lainnya melakukannya.
Evan Carroll

5

Untuk IBM DB2 Anda akan menggunakan yang berikut:

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

Perhatikan bahwa dalam DB2, nama kolom akan dalam huruf besar kecuali jika mereka didefinisikan di dalam tanda kutip ganda dengan sesuatu selain huruf besar Maka Anda harus menyediakan casing yang tepat dari nama kolom juga.


1
Jika kolom mana didefinisikan menggunakan tanda kutip (yang harus dihindari), Anda dapat menggunakan UPPER atau ucase fungsi untuk mengubah colname untuk huruf: WHERE UPPER(colname) = 'COLUMN_NAME'.
Lennart

3

Kueri di bawah ini akan memberi Anda apa yang Anda cari:

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

Jika Anda mencari kolom dengan nama yang tepat, ganti saja WHEREklausa dengan:

where c.name = 'ColumnSearchText';

0

dalam 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'

Silakan berikan nama kolom ke variabel ini: $COLUMN_NAME


-3

// Pilih tabel tertentu:

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

Anda mungkin salah membaca pertanyaan OP, jawaban Anda tidak menjawab pertanyaan yang diajukan.
Lennart

-3

Untuk SQL Server:

SELECT name 
FROM sysobjects 
WHERE id IN 
( 
    SELECT id 
    FROM syscolumns 
    WHERE name = 'EXACT_COLUMN_NAME_TO_SEARCH'
)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.