माईएसक्यूएल की सभी तालिकाएँ उनमें विशिष्ट कॉलम नामों के साथ कैसे खोजें?


852

मेरे पास 2-3 अलग-अलग कॉलम नाम हैं, जिन्हें मैं पूरे डीबी में देखना चाहता हूं और उन सभी टेबलों को सूचीबद्ध करना चाहता हूं जिनमें वे कॉलम हैं। कोई आसान स्क्रिप्ट?


जवाबों:


1396

स्तंभ columnAया ColumnBडेटाबेस में सभी तालिकाएँ प्राप्त करने के लिए YourDatabase:

SELECT DISTINCT TABLE_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME IN ('columnA','ColumnB')
        AND TABLE_SCHEMA='YourDatabase';

6
@ इको - आप हमेशा mysqldump के साथ खेल सकते हैं --स्काइप-एक्सटेंड-इन्सर्ट और फिर फ़ाइल के माध्यम से grep ... गंदे लेकिन अजीब तरह से सिटिंग :)
Ken

1
@ इको, 5 से पहले के संस्करणों के लिए mysqldump का उपयोग करके फ़ाइल को संरचना को डंप करें, मेरा उत्तर देखें।
रादू मारिस

8
आप DATABASE()वर्तमान में चयनित डेटाबेस में खोज करने के लिए एक स्ट्रिंग के बजाय उपयोग कर सकते हैं ।
शर्लक

1
@ क्या: आपकी क्वेरी में एक और फ़िल्टर जोड़ने का एक तरीका है? वास्तव में, उन तालिकाओं का चयन करना जहां डी कॉलमए का एक विशिष्ट मूल्य है।
फ्रेड फ्लेच

2
@FredFLECHE मुझे लगता है कि उस स्तर पर मैं सिर्फ एक स्क्रिप्ट में उनके माध्यम से लूप करूँगा और इसे सरल रखूँगा
केन

176
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%wild%';

13
यदि कई डेटाबेस हैं, तो WHERE TABLE_SCHEMA = "" लाइन भी जोड़ें।
जॉन मिलिकिन

1
धन्यवाद जॉन, अगर मुझे स्तंभ नाम और कॉलम कॉलम मौजूद करने की आवश्यकता है तो प्रश्न कैसे होगा?
जोबी जॉय

1
@JohnMillikin: या इसके विपरीत, यदि आप डेटाबेस को नहीं जानते हैं, लेकिन केवल फ़ील्ड नाम है, तो इसे छोड़ दें और TABLE_SCHEMAसभी डेटाबेस + तालिकाओं को देखने के लिए सेट किए गए रिटर्न के फ़ील्ड में जोड़ें , जिसमें वह कॉलम नाम है।
हाबिल

क्या इसे या तो नहीं पढ़ा जाना चाहिए: जैसे '% जंगली%' या 'जंगली' की तरह 'जंगली'?
चाचा इरो सेप

1
मैंने अभी-अभी यह कोशिश की है लेकिन उन सभी परिणामों पर ध्यान दिया है जहां मुझे उन वस्तुओं के लिए मिला है जो क्वेरी के साथ दिखाई नहीं देते हैं show tables;। क्या कोई समझा सकता है कि ऐसा क्यों हो सकता है?
wdkrnls


38
SELECT DISTINCT TABLE_NAME, COLUMN_NAME  
FROM INFORMATION_SCHEMA.COLUMNS  
WHERE column_name LIKE 'employee%'  
AND TABLE_SCHEMA='YourDatabase'

19

उस संस्करण में, जिसमें information_schemaपुराने संस्करण (या कुछ ndb) नहीं हैं, आप तालिका संरचना को डंप कर सकते हैं और स्तंभ को मैन्युअल रूप से खोज सकते हैं।

mysqldump -h$host -u$user -p$pass --compact --no-data --all-databases > some_file.sql

अब some_file.sqlअपने पसंदीदा टेक्स्ट एडिटर का उपयोग करके कॉलम नाम खोजें , या कुछ निफ्टी awk स्क्रिप्ट का उपयोग करें।


और कॉलम खोजने के लिए एक साधारण सीड स्क्रिप्ट, बस COLUMN_NAME को अपने साथ बदलें :

sed -n '/^USE/{h};/^CREATE/{H;x;s/\nCREATE.*\n/\n/;x};/COLUMN_NAME/{x;p};' <some_file.sql
USE `DATABASE_NAME`;
CREATE TABLE `TABLE_NAME` (
  `COLUMN_NAME` varchar(10) NOT NULL,

आप सीधे सेड में डंप कर सकते हैं लेकिन यह तुच्छ है।


12

इसके विलोम की खोज करने वालों के लिए, यानी उन टेबल की तलाश में जिनमें एक निश्चित कॉलम नाम नहीं है, यहाँ क्वेरी है ...

SELECT DISTINCT TABLE_NAME FROM information_schema.columns WHERE 
TABLE_SCHEMA = 'your_db_name' AND TABLE_NAME NOT IN (SELECT DISTINCT 
TABLE_NAME FROM information_schema.columns WHERE column_name = 
'column_name' AND TABLE_SCHEMA = 'your_db_name');

यह वास्तव में उपयोगी था जब हमने धीरे-धीरे InnoDB के विशेष ai_colकॉलम के उपयोग को लागू करना शुरू किया और यह पता लगाने की जरूरत थी कि हमारे 200 टेबल में से कौन सा अभी तक उन्नत नहीं हुआ है।


8

यदि आप " केवल सभी तालिकाएँ प्राप्त करना चाहते हैं" , तो इस क्वेरी का उपयोग करें:

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME like '%'
and TABLE_SCHEMA = 'tresbu_lk'

यदि आप " कॉलम के साथ सभी तालिकाएँ प्राप्त करना चाहते हैं" , तो इस क्वेरी का उपयोग करें:

SELECT DISTINCT TABLE_NAME, COLUMN_NAME  
FROM INFORMATION_SCHEMA.COLUMNS  
WHERE column_name LIKE '%'  
AND TABLE_SCHEMA='tresbu_lk'

6

इस एक पंक्ति क्वेरी का उपयोग करें, अपने कॉलम नाम से वांछित_column_name बदलें।

SELECT TABLE_NAME FROM information_schema.columns WHERE column_name = 'desired_column_name';


2

Info_schema के साथ समस्या यह है कि यह बहुत धीमा हो सकता है। SHOW कमांड का उपयोग करना तेज है।

डेटाबेस का चयन करने के बाद आप सबसे पहले क्वेरी शॉवेल्स भेजें। और फिर आप प्रत्येक टेबल के लिए SHOW COLUMNS करते हैं।

PHP में जो कुछ इस तरह दिखेगा

    $ res = mysqli_query ("शो टेबल");
    जबकि ($ पंक्ति = mysqli_fetch_array ($ res))
    {$ rs2 = mysqli_query ("SHOW COLUMNS FROM"। $ row [0]);
        जबकि ($ rw2 = mysqli_fetch_array ($ rs2))
        {अगर ($ rw2 [0] == $ लक्ष्य)
               ....
        }
    }


0
select distinct table_name 
from information_schema.columns 
where column_name in ('ColumnA') 
and table_schema='YourDatabase';
and table_name in 
(
 select distinct table_name 
 from information_schema.columns 
 where column_name in ('ColumnB')
 and table_schema='YourDatabase';
);

उस ^ ^ को स्वीकार किए गए उत्तर की तरह स्तंभ या स्तंभ के बजाय कॉलम और कॉलम के साथ टेबल मिल जाएगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.