एक विशिष्ट कॉलम नाम वाले db में सभी तालिकाओं को खोजने के लिए एक क्वेरी कैसे लिखें


12

मुझे लगभग 100 टेबल के साथ एक डेटाबेस मिला है और मुझे उनमें से दो से विशिष्ट डेटा प्राप्त करने के लिए एक जॉइन क्वेरी बनाने की आवश्यकता है। मैं एक को जानता हूं लेकिन दूसरे को नहीं। मूल रूप से मुझे कुछ चाहिए:

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

मैं यह कैसे कर सकता हूँ?


6
मेरा जवाब SQL सर्वर ग्रहण किया। क्या आप जिस RDBMS के साथ काम कर रहे हैं?
थॉमस स्ट्रिंगर

जवाबों:


21

का उपयोग करते हुए information_schema

यह मानकों का अनुपालन करने वाला क्रॉस-आरडीबीएमएस तरीका है।

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/… ) द्वारा उपयोग करने के लिए क्यों नहीं
थॉमस स्ट्रिंगर

2
@ThomasStringer मैं सहमत हूं लेकिन ओपी ने किसी भी dbms टैग के साथ प्रश्न को टैग नहीं किया है।
ypercube y

@ThomasStringer एक वास्तविक डेटाबेस का उपयोग करें, बल्ले से ठीक पोस्टग्रेक्ज़क्यूएल ने information_schema.columns2006 के बाद से पहचान कॉलम का समर्थन किया है। एक पूर्ण दशक पहले भी इसे लागू किया था। यदि Microsoft SQL मानक का समर्थन नहीं करता है, तो शायद हमें उन्हें नागवार देखना चाहिए। दूसरे करते हैं।
इवान कैरोल

5

IBM DB2 के लिए आप निम्नलिखित का उपयोग करेंगे:

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

ध्यान दें कि DB2 में, स्तंभ के नाम ऊपरी मामले में होंगे, जब तक कि वे ऊपरी मामले के अलावा किसी अन्य चीज़ के साथ दोहरे उद्धरण चिह्नों के अंदर परिभाषित न हों । फिर आपको कॉलम नाम के सटीक आवरण को भी आपूर्ति करना होगा ।


1
यदि स्तंभ जहां उद्धरण (जिसे टाला जाना चाहिए) का उपयोग करके परिभाषित किया गया है, तो आप कॉलनाम को ऊपरी मामले में बदलने के लिए UPPER या UCASE फ़ंक्शन का उपयोग कर सकते हैं 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

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
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 सर्वर के लिए:

SELECT name 
FROM sysobjects 
WHERE id IN 
( 
    SELECT id 
    FROM syscolumns 
    WHERE name = 'EXACT_COLUMN_NAME_TO_SEARCH'
)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.