Cách viết truy vấn để tìm tất cả các bảng trong db có tên cột cụ thể


12

Tôi đã có một cơ sở dữ liệu với khoảng 100 bảng và tôi cần xây dựng một truy vấn nối để có được dữ liệu cụ thể từ hai trong số chúng. Tôi biết cái này nhưng không phải cái kia. Về cơ bản tôi cần một cái gì đó như:

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

Tôi có thể làm cái này như thế nào?


6
Câu trả lời của tôi giả định SQL Server. Đó có phải là RDBMS mà bạn đang làm việc không?
Thomas Stringer

Câu trả lời:


21

Sử dụng information_schema

Đây là cách RDBMS chéo tuân thủ tiêu chuẩn để làm điều đó.

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

Bạn có thể thấy tài liệu này


5
Tại sao không sử dụng INFORMATION_SCHEMA, bởi chính @AaronBertrand của chúng tôi ( sqlblog.com/bloss/aaron_bertrand/archive/2011/11/03/ trên )
Thomas Stringer

2
@ThomasStringer Tôi đồng ý nhưng OP chưa gắn thẻ câu hỏi với bất kỳ thẻ dbms nào.
ypercubeᵀᴹ

@ThomasStringer Sử dụng một cơ sở dữ liệu thực tế, ngay lập tức con dơi PostgreQuery đã hỗ trợ Cột Danh tính information_schema.columnstừ năm 2006. Một thập kỷ đầy đủ trước khi nó thậm chí còn triển khai chúng. Nếu Microsoft SQL không hỗ trợ tiêu chuẩn, có lẽ chúng ta nên xem xét việc cằn nhằn chúng. Những người khác làm.
Evan Carroll

5

Đối với IBM DB2, bạn sẽ sử dụng như sau:

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

Lưu ý rằng trong DB2, các tên cột sẽ được viết hoa, trừ khi chúng được định nghĩa bên trong các dấu ngoặc kép với một cái gì đó không phải là chữ hoa. Sau đó, bạn phải cung cấp vỏ chính xác của tên cột là tốt.


1
Nếu cột được xác định bằng dấu ngoặc kép (cần tránh), bạn có thể sử dụng hàm UPPER hoặc UCASE để chuyển đổi tên màu thành chữ hoa : WHERE UPPER(colname) = 'COLUMN_NAME'.
Lennart

3

Truy vấn dưới đây sẽ cung cấp cho bạn những gì bạn đang tìm kiếm:

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

Nếu bạn đang tìm kiếm các cột của một tên chính xác, chỉ cần thay thế WHEREmệnh đề bằng:

where c.name = 'ColumnSearchText';

0

trong 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 / vui lòng:

select table_name from all_tab_columns where column_name='yourcolumnname';

0
SELECT * FROM _v_sys_columns WHERE COLUMN_NAME='$COLUMN_NAME'

Vui lòng chuyển tên cột cho biến này: $COLUMN_NAME


-3

// Chọn bảng Đặc biệt:

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

Bạn có thể đọc sai câu hỏi của OP, câu trả lời của bạn không trả lời câu hỏi đã được hỏi.
Lennart

-3

Đối với máy chủ SQL:

SELECT name 
FROM sysobjects 
WHERE id IN 
( 
    SELECT id 
    FROM syscolumns 
    WHERE name = 'EXACT_COLUMN_NAME_TO_SEARCH'
)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.