हमारे पास 1 मुख्य (MySQL) डेटाबेस (main) है जिसमें कुछ जानकारी वाले उपयोगकर्ताओं के लिए एक तालिका सहित सामान्य जानकारी है।

और उसके आगे हमारे पास प्रत्येक कंपनी (main_1, main_2, ...) के लिए 1 डेटाबेस है, साथ ही (डुप्लिकेट) उपयोगकर्ताओं के लिए एक तालिका भी है। द्वितीय स्तरीय उपयोगकर्ता तालिका में ऐसी जानकारी है जो पहले स्तर के पास नहीं है।

इसलिए हमें टियर 1 डेटाबेस से टियर 2 डेटाबेस के मानों के साथ उपयोगकर्ताओं को फ़िल्टर करने की आवश्यकता है।

मुझे पता है कि हम डेटाबेस की एक सूची का उपयोग कर प्राप्त कर सकते हैं:

SELECT *
FROM information_schema.SCHEMATA
WHERE schema_name LIKE "main_%"

लेकिन फिर हमें सभी डेटाबेस से उपयोगकर्ता तालिकाओं को मिलाना होगा।

अगर किसी के पास कोई विचार है, तो बहुत बाध्य है।

0
Lennert 3 अक्टूबर 2018, 15:15

1 उत्तर

सबसे बढ़िया उत्तर

उदाहरण के लिए आपको डायनेमिक sql में प्रेजेंटेशन के लिए एक स्टेटमेंट बनाने की जरूरत है

set @sql = 
(select  group_concat('select * from ', schema_name,'.users union all ') 
from
(
SELECT schema_name FROM information_schema.SCHEMATA
) s
)
;
set @sql = replace(@sql,',', ' ');
set @sql = substring(@sql, 1, length(@sql) - 11);
set @sql = concat(@sql,';');

उत्पादन (मेरे डीबी में)

select @sql

select * from bank.users union all  
select * from classicmodels.users union all  
select * from information_schema.users union all  
select * from mysql.users union all  
select * from performance_schema.users union all  
select * from sandbox.users union all  
select * from test.users;

जिसे आप फिर सबमिट करें

prepare sqlstmt from @sql;
execute sqlstmt;
deallocate prepare sqlstmt;
0
P.Salmon 3 अक्टूबर 2018, 12:46