Belirli bir sütun adı olan bir db içindeki tüm tabloları bulmak için bir sorgu yazma


12

Ben yaklaşık 100 tablolar ile bir veritabanı var ve ben onlardan iki belirli verileri almak için bir birleştirme sorgusu oluşturmak gerekir. Birini biliyorum ama diğerini değil. Temelde şöyle bir şeye ihtiyacım var:

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

Bunu nasıl yapabilirim?


6
Cevabım SQL Server olduğunu varsaydı. Bu birlikte çalıştığınız RDBMS mi?
Thomas Stringer

Yanıtlar:


21

kullanma information_schema

Bu, standartlara uygun çapraz RDBMS yoludur.

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

Bunu belgelenmiş olarak görebilirsiniz


5
Neden kullanmamayı INFORMATION_SCHEMA(bizim çok kendi @AaronBertrand tarafından, sqlblog.com/blogs/aaron_bertrand/archive/2011/11/03/... )
Thomas Stringer

2
@ThomasStringer Kabul ediyorum ama OP herhangi bir dbms etiketi ile soruyu etiketlemedi.
ypercubeᵀᴹ

@ThomasStringer PostgreSQL, information_schema.columns2006 yılından bu yana kimlik sütunlarını desteklediğinden, gerçek bir veritabanı kullanın . Onları uygulamadan tam on yıl önce. Microsoft SQL standardı desteklemiyorsa, belki de onları nagging'e bakmalıyız. Diğerleri yapar.
Evan Carroll

5

IBM DB2 için aşağıdakileri kullanırsınız:

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

DB2'de, sütun adları büyük harf dışında bir şeyle çift tırnak içinde tanımlanmadığı sürece büyük harflerle yazılır . Sonra da sütun adının tam kasasını sağlamanız gerekir.


1
(Kaçınılmalıdır) tırnak kullanılarak tanımlanır sütununda ise, büyük harfe colName dönüştürmeye ÜST veya ucase işlevini kullanabilirsiniz: WHERE UPPER(colname) = 'COLUMN_NAME'.
Lennart

3

Aşağıdaki sorgu size aradığınızı verecektir:

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

Tam adda sütunlar arıyorsanız, WHEREyan tümceyi değiştirin :

where c.name = 'ColumnSearchText';

0

Teradata 15'te:

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'

Lütfen sütun adını bu değişkene iletin: $COLUMN_NAME


-3

// Özel tabloyu seçin:

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

Muhtemelen OP'nin sorusunu yanlış okudunuz, cevabınız sorulan soruya cevap vermiyor.
Lennart

-3

SQL Server için:

SELECT name 
FROM sysobjects 
WHERE id IN 
( 
    SELECT id 
    FROM syscolumns 
    WHERE name = 'EXACT_COLUMN_NAME_TO_SEARCH'
)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.