Подзапрос в предложении FROM с использованием information_schema.tables - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь получить все таблицы из базы данных, в которой имя таблицы содержит «logs», и получить сумму последнего значения в каждой таблице столбца с именем flag.

Запрос, который я пытался:

Select SUM(flag) FROM (SELECT table_name 
    FROM information_schema.tables
    WHERE table_schema = 'db_test' AND table_name like '%logs') as c ORDER BY id DESC Limit 1;

Но у меня возникла проблема с подзапросом, я думаю, что весь запрос неверен.

1 Ответ

2 голосов
/ 25 апреля 2020

Я разбил это на маленькие шаги - ничто не мешает вам приспособиться к вкусу.

drop table if exists onelog,twolog;
create table onelog (id int,flag int);
create table twolog (id int,flag int);

insert into onelog values (1,10),(2,1);
insert into twolog values (1,20),(2,1);


set @sql = 
(
select group_concat(
        concat('select id,flag from ' 
        ,tname, ' where id = (select max(id) from ', tname, ') union all'
        )
        )
from
(
select table_name tname from information_schema.tables where table_name like '%log' and table_schema = 'sandbox'
) s
) 
;
set @sql = substring(@sql,1, length(@sql) - 10);
set @sql = replace(@sql,'union all,','union all ');
set @sql = concat('select sum(flag) from (', @sql , ' ) s');

#select @sql;

prepare sqlstmt from @sql;
execute sqlstmt;
deallocate prepare sqlstmt;

+-----------+
| sum(flag) |
+-----------+
|         2 |
+-----------+
1 row in set (0.001 sec)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...