सवाल MySQL में उन सभी तालिकाओं को विशिष्ट स्तंभ नामों के साथ कैसे ढूंढें?


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


671
2017-10-11 07:02


मूल


इसका संदर्भ लें: winashwin.wordpress.com/2012/08/28/mysql-search


जवाब:


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

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

1105
2017-10-11 08:42



@ken, लेकिन क्या ऐसा कुछ भी है जो पूर्व mysql 5 के लिए काम करता है? - Echo
@Echo - आप हमेशा mysqldump के साथ --skip-extended-insert के साथ खेल सकते हैं और फिर फ़ाइल के माध्यम से grep ... गंदे लेकिन अजीब रूप से Satifying :) - Ken
@Echo, 5 से पहले के संस्करणों के लिए संरचना को mysqldump का उपयोग करके फ़ाइल करने के लिए डंप करें, मेरा उत्तर देखें। - Radu Maris
आप भी उपयोग कर सकते हैं DATABASE() वर्तमान में चयनित डेटाबेस में खोजने के लिए एक स्ट्रिंग के बजाय। - Sherlock
@FredFLECHE मुझे लगता है कि उस चरण में मैं सिर्फ एक स्क्रिप्ट में उनके माध्यम से लूप होगा और इसे सरल रखूंगा - Ken


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

124
2017-10-11 07:06



यदि कई डेटाबेस हैं, तो WHERE TABLE_SCHEMA = "" लाइन भी जोड़ें। - John Millikin
धन्यवाद जॉन, अगर मुझे टेबल नाम प्राप्त करने की आवश्यकता है तो क्वेरी कैसे होगी, जिसमें कॉलम ए और कॉलमब मौजूद है? - Jobi Joy
@ जॉन मिलिकिन: या इसके विपरीत, यदि आप डेटाबेस नहीं जानते हैं, लेकिन केवल फ़ील्ड का नाम है, तो इसे छोड़ दें और जोड़ें TABLE_SCHEMA सभी डेटाबेस देखने के लिए रिटर्न सेट के फ़ील्ड में + तालिकाएं जिनमें कॉलम नाम होता है। - Abel
क्या इसे पढ़ना नहीं चाहिए: 'जंगली' की तरह '% जंगली%' या = 'जंगली' की तरह? - Uncle Iroh
मैंने अभी यह कोशिश की लेकिन मुझे उन सभी परिणामों के बारे में देखा जो वस्तुओं के लिए हैं जो क्वेरी के साथ दिखाई नहीं देते हैं show tables;। क्या कोई यह समझा सकता है कि यह मामला क्यों हो सकता है? - wdkrnls


एसक्यूएल की एक पंक्ति में बस इतना किया गया:

SELECT * FROM information_schema.columns WHERE column_name = 'column_name';

37
2017-10-09 10:46





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

30
2017-12-11 03:37





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

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

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


और स्तंभ खोजने के लिए एक साधारण sed स्क्रिप्ट, बस प्रतिस्थापित करें आम नाम तुम्हारे साथ:

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,

आप सीधे डंप को डंप पाइप कर सकते हैं लेकिन यह छोटा है।


15
2017-08-14 13:01





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

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 टेबलों में से कौन सा अपग्रेड किया गया है।


7
2017-08-20 10:06





अगर तुम चाहते हो "केवल सभी टेबल प्राप्त करने के लिए", फिर इस क्वेरी का प्रयोग करें:

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'

5
2017-12-11 12:42





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

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

2
2017-09-19 15:44





SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE '%city_id%' AND TABLE_SCHEMA='database'

0
2018-05-17 05:50