如何编写查询以查找数据库中具有特定列名的所有表


12

我有一个包含约100个表的数据库,我需要建立一个联接查询以从其中两个表中获取特定数据。我知道一个,但另一个不知道。基本上我需要这样的东西:

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

我怎样才能做到这一点?


6
我的答案假设是SQL Server。您正在使用的RDBMS吗?
Thomas Stringer

Answers:


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.columns自2006年以来一直支持Identity Columns 。甚至整整十年甚至都没有实现它们。如果Microsoft SQL不支持该标准,也许我们应该考虑一下。别人做。
埃文·卡罗尔

5

对于IBM DB2,您将使用以下内容:

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

注意,在DB2中,除非在双引号内使用大写字母以外的名称定义列名,否则它们将使用大写字母。然后,您还必须提供列名称的确切大小写。


1
如果使用引号定义了该列(应避免使用引号),则可以使用UPPER或UCASE函数将列名转换为大写: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'
)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.