Як написати запит, щоб знайти всі таблиці в db, які мають конкретну назву стовпця


12

У мене є база даних з приблизно 100 таблицями, і мені потрібно створити запит приєднання, щоб отримати конкретні дані з двох з них. Я знаю одне, а не інше. В основному мені потрібно щось на кшталт:

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

Як я можу це зробити?


6
Мою відповідь припустив SQL Server. Це RDBMS, з яким ви працюєте?
Томас Стрінгер

Відповіді:


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 Я згоден, але ОП не позначив це питання жодним тегом dbms.
ypercubeᵀᴹ

@ThomasStringer Використовуйте реальну базу даних, щойно перебуває на базі. PostgreSQL підтримує стовпці ідентичності information_schema.columnsз 2006 року. Повне десятиліття, перш ніж їх навіть реалізували. Якщо Microsoft SQL не підтримує стандарт, можливо, ми повинні дивитись на те, щоб їх понімати. Інші роблять.
Еван Керролл

5

Для IBM DB2 ви використовуєте наступне:

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

Зауважте, що в DB2 імена стовпців будуть у верхньому регістрі, якщо вони не були визначені всередині подвійних лапок з іншим, ніж верхній регістр. Тоді вам також потрібно вказати точний кожух назви стовпця.


1
Якщо стовпець , де визначено з допомогою лапок (які слід уникати), ви можете використовувати ВЕРХНІЙ або UCase функцію для перетворення ColName в верхній регістр: WHERE UPPER(colname) = 'COLUMN_NAME'.
Леннарт

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

у Терадаті 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;

Ви, мабуть, неправильно прочитали питання ОП, ваша відповідь не відповідає на запитання, яке було задано.
Леннарт

-3

Для SQL Server:

SELECT name 
FROM sysobjects 
WHERE id IN 
( 
    SELECT id 
    FROM syscolumns 
    WHERE name = 'EXACT_COLUMN_NAME_TO_SEARCH'
)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.