วิธีเขียนแบบสอบถามเพื่อค้นหาตารางทั้งหมดใน db ที่มีชื่อคอลัมน์เฉพาะ


12

ฉันมีฐานข้อมูลที่มีประมาณ 100 ตารางและฉันต้องสร้างแบบสอบถามแบบใช้ร่วมเพื่อรับข้อมูลเฉพาะจากสองรายการ ฉันรู้หนึ่ง แต่ไม่ใช่คนอื่น โดยทั่วไปฉันต้องการบางสิ่งบางอย่างเช่น:

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

ฉันจะทำสิ่งนี้ได้อย่างไร


6
คำตอบของฉันถือว่าเป็นเซิร์ฟเวอร์ SQL นั่นคือ RDBMS ที่คุณทำงานด้วยหรือไม่?
Thomas Stringer

คำตอบ:


21

การใช้ information_schema

นี่คือ cross-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 ให้การสนับสนุน Identity Columns ในinformation_schema.columnsปี 2549 นับตั้งแต่ทศวรรษที่ผ่านมาก่อนที่มันจะนำไปใช้จริง หาก Microsoft SQL ไม่รองรับมาตรฐานบางทีเราควรดูจู้จี้ คนอื่นทำ
Evan Carroll

5

สำหรับ IBM DB2 คุณจะต้องใช้สิ่งต่อไปนี้:

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

โปรดทราบว่าใน DB2 ชื่อคอลัมน์จะเป็นตัวพิมพ์ใหญ่เว้นแต่จะมีการกำหนดไว้ในเครื่องหมายคำพูดคู่ด้วยอย่างอื่นที่ไม่ใช่ตัวพิมพ์ใหญ่ จากนั้นคุณต้องระบุปลอกที่แน่นอนของชื่อคอลัมน์ด้วย


1
ถ้าคอลัมน์ที่กำหนดโดยใช้คำพูด (ซึ่งควรหลีกเลี่ยง), คุณสามารถใช้บนหรือ UCase ฟังก์ชั่นที่จะเปลี่ยน colname 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
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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.