2013-02-18 22 views
12

मेरे पास एक MySQL डेटाबेस है जिसे listDB कहा जाता है जिसमें कॉलम नाम Product आदि के साथ कई तालिकाओं को शामिल किया गया है। मैं सभी तालिकाओं से SELECT चाहता हूं जहां उत्पाद% XYZ% की तरह है, और खोज परिणाम को एक अलग तालिका में प्रदर्शित करें।सभी तालिकाओं से चुनें - MySQL

SELECT * FROM * WHERE Product LIKE %XYZ% 

लेकिन यह काम नहीं कर रहा:

मैं इस कोशिश की। इस उद्देश्य के लिए सही सवाल क्या है?

+2

उपयोग 'union' ..' यूनिअन एक एकल परिणाम सेट में एकाधिक SELECT स्टेटमेंट्स से परिणाम गठबंधन करने के लिए प्रयोग किया जाता है। ' –

+1

इस चयन का चयन करें * सूची डीबी से। * जहां उत्पाद '% XYZ%' जैसा है; – Parvathy

+0

@ पारवथी - यह क्वेरी काम नहीं कर रही है ..सिंटेक्स त्रुटि हुई –

उत्तर

3

के रूप में सुहेल Meman टिप्पणी में कहा:

SELECT column1, column2, column3 FROM table 1 
UNION 
SELECT column1, column2, column3 FROM table 2 
... 

काम करेगा।

लेकिन आपके सभी SELECTS में समान मात्रा में कॉलम शामिल होंगे। और क्योंकि आप इसे एक परिणामी तालिका में प्रदर्शित कर रहे हैं, इसलिए उन्हें एक ही जानकारी होनी चाहिए।

आप जो करना चाहते हैं, वह उत्पाद आईडी या उस तरह कुछ है। इस तरह आपको अधिक कॉलम मिलेंगे, जो अधिकतर समय में अधिक समझ में आता है।

Select * from OneTable where product like '%XYZ%' 

परिणाम डाला जाना चाहिए:

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

तो फिर तुम तो तुम eachtime चयन इन टेबल पर एक cursor चलाने के लिए है:

7

आप स्तंभ उत्पाद युक्त इस बयान का उपयोग कर सभी तालिकाओं मिल एक तीसरी तालिका या दृश्य में, here देखें।

नोटिस: यह केवल तभी काम कर सकता है जब सभी तालिका की संरचना समान हो, अन्यथा आपको यह देखना होगा कि इन सभी तालिकाओं के लिए कौन से कॉलम एकजुट हैं और केवल इन कॉलम को रखने के लिए अपनी परिणाम तालिका/दृश्य बनाएं।

2

आप सभी तालिकाओं है कि स्तंभ "उत्पाद" information_Schema.columns

SELECT DISTINCT table_name FROM information_schema.columns WHERE column_name ="Product"; 

से मिलता है और न ही एक प्रक्रिया

delimiter // 
CREATE PROCEDURE curdemo() 
BEGIN 
    DECLARE a varchar(100); 
    DECLARE cur1 CURSOR FOR SELECT DISTINCT table_name FROM information_schema.columns WHERE column_name ="Product"; 
    OPEN cur1; 

    read_loop: LOOP 
    FETCH cur1 INTO a; 

    SELECT * FROM a; 

    END LOOP; 

    CLOSE cur1; 
END; 

delimiter ; 

call curdemo(); 
2

क्यों तुम सिर्फ mysql डेटाबेस डंप न बनाने लेकिन जब आप विस्तार के साथ कर सकते हैं बिना सिंगल-ट्रांजैक्शन के चलते आप अन्य क्लाइंट्स के कनेक्शन को बाधित करेंगे:

mysqldump --host=hostname.de --port=0000 --user=username --password=password --single-transaction --skip-add-locks --skip-lock-tables --default-character-set=utf8 datenbankname > mysqlDBBackup.sql 

उसके बाद फ़ाइल बाहर पढ़ सकते हैं और आप क्या चाहते हैं के लिए खोज .... स्ट्रिंग्स में .....

3
SELECT product FROM Your_table_name WHERE Product LIKE '%XYZ%'; 

ऊपर बयान एक एकल तालिका से परिणाम दिखाई देंगे। यदि आप और तालिकाओं को जोड़ना चाहते हैं तो बस यूनियन कथन का उपयोग करें।

SELECT product FROM Table_name_1 
WHERE Product LIKE '%XYZ%' 
UNION 
SELECT product FROM Table_name_2 
WHERE Product LIKE '%XYZ%' 
UNION 
SELECT product FROM Table_name_3 
WHERE Product LIKE '%XYZ%' 

... और इतने पर