Использовать поля из таблицы пользователей во всех базах данных - PullRequest
0 голосов
/ 03 октября 2018

У нас есть 1 основная (MySQL) база данных (main), в которой хранится общая информация, включая таблицу для пользователей с некоторой информацией.

И, кроме того, у нас есть 1 база данных для каждойкомпания (main_1, main_2, ...), а также с таблицей для (дубликатов) пользователей.Таблица пользователей 2-го уровня содержит информацию, которой нет в 1-м уровне.

Поэтому нам необходимо отфильтровать пользователей из базы данных уровня 1 по значениям из баз данных уровня 2.

Я знаю, что мыможно получить список баз данных, используя:

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

Но тогда нам потребуется объединить пользовательские таблицы из всех баз данных.

Если у кого-то есть идея, очень благодарен.

1 Ответ

0 голосов
/ 03 октября 2018

Вам нужно создать оператор для представления в динамическом 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...