Имя: Пароль:
1C
1С v8
PostgreSQL select where table from select
0 gerodoth
 
09.06.20
22:19
Доброго дня, помогите составить запрос.
Есть куча баз похожих но немного разных по наименованиям таблиц, все крутятся на постгресе.
Нужно отобрать в таблицах с РН не активные записи
Что-то типа
SELECT * FROM (SELECT table_name FROM information_schema.tables where table_name like '%accumrg%') WHERE _active = False
запрос в скобках отрабатывает, а как его результат использовать в запросе снаружи - знаний не хватает.
Спасибо.
1 youalex
 
09.06.20
22:31
CTE : https://www.postgresqltutorial.com/postgresql-cte/

with cte1 as (SELECT table_name FROM information_schema.tables where table_name like '%accumrg%') WHERE _active = False)
select * from cte1
2 youalex
 
09.06.20
22:33
т.е.
with cte1 as (SELECT table_name FROM information_schema.tables where table_name like '%accumrg%')
select * from cte1 WHERE _active = False
3 gerodoth
 
10.06.20
08:06
спасибо!
4 gerodoth
 
10.06.20
08:40
немного не доходит
последний запрос выдает ошибку, а
with cte1 as (SELECT table_name FROM information_schema.tables where table_name like '%accumrg%')
select * from cte1
выдает список баз в столбик
5 bolero
 
10.06.20
09:51
(1) да, ты сам-то пробовал?
> Common Table Expressions or CTEs, can be thought of as defining temporary tables that exist just for one query

(0) я похожую задачу решаю в два захода: одним запросом составляю список таблиц, у которых _есть_ такое поле (а оно например может быть не у всех таблиц)
по шаблону заполняю второй запрос (важно выбирать только конкретные поля) и соединяю его UNION ALL

типа того:

SELECT _Ref, _Period,'РН.ТоварыНаСкладах' as table_name WHERE _active=False
UNION ALL
SELECT _Ref, _Period,'РН.ТоварыОрганизаций' as table_name WHERE _active=False
6 gerodoth
 
10.06.20
11:09
мне б так чтоб вообще одной универсальной командой по разным базам. иначе проще в 1с получать список баз из структуры бд и генерить запрос для постгреса, оставляю этот вариант на потом если первым не выйдет.