powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Упростить SELECT
4 сообщений из 4, страница 1 из 1
Упростить SELECT
    #38740935
Viacheslav_mihalich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня,

Просьба помочь упростить селект:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
	SELECT 
	array_to_string (array(SELECT d_t_ids."ID" FROM "DOCTOR_TYPES" d_t 
		       LEFT JOIN "DOCTOR_TYPE_IDS" d_t_ids ON d_t_ids."ID" = d_t."DOCTOR_TYPE_ID" 
		       WHERE d_t."DOCTOR_ID" = d."ID" ORDER BY d_t_ids."ID" ASC), ',') as DOCTOR_TYPE_ID, 
	array_to_string (array(SELECT d_t_ids."NAME" FROM "DOCTOR_TYPES" d_t 
		       LEFT JOIN "DOCTOR_TYPE_IDS" d_t_ids ON d_t_ids."ID" = d_t."DOCTOR_TYPE_ID" 
		       WHERE d_t."DOCTOR_ID" = d."ID" ORDER BY d_t_ids."ID" ASC), ',') as DOCTOR_TYPE_NAME
	FROM "DOCTORS" d
	LEFT JOIN "CLINIC_DOCTOR_SCHEDULE" c_d_s ON d."ID" = c_d_s."DOCTOR_ID"
	WHERE c_d_s."CLINIC_ID" = 1
	AND c_d_s."EXPIRATION_TIME" is NULL
	ORDER BY d."ID" ASC;



Оба выводящихся поля DOCTOR_TYPE_ID и DOCTOR_TYPE_NAME формируются из практически одинаковых селектов за исключением того, что в первом поле выводится строка из id, а в другой из name одной и той же таблицы "DOCTOR_TYPES".
Оба внутренних селекта приходится упорядочивать только для того, чтобы они выводили данные в одинаковом порядке следования.
Подскажите пожалуйста, каким образом можно (если вообще возможно) этот внутренний селект написать один раз, чтобы дважды не обращаться к одним и тем же таблицам?
...
Рейтинг: 0 / 0
Упростить SELECT
    #38741048
Sergei.Agalakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with t1 as
(
select 1 as id, 'a' as name
union all
select 2 as id, 'b' as name
union all
select 3 as id, 'c' as name
)
select string_agg(cast(t1.id as varchar(10)),',') id_list,
       string_agg(t1.name,',') name_list
  from t1


Подойдет? Не забудьте про COALESCE, если возможны NULLs.
...
Рейтинг: 0 / 0
Упростить SELECT
    #38741069
Sergei.Agalakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with t1 as
(
select 1 as id, 'a' as name
union all
select 2 as id, 'b' as name
union all
select 3 as id, 'c' as name
)
select string_agg(cast(t1.id as varchar(10)),',' order by t1.id) id_list,
       string_agg(t1.name,',' order by t1.id) name_list
  from t1


Ну и порядок сортировки прямо в аггрегате добавить...
...
Рейтинг: 0 / 0
Упростить SELECT
    #38741546
Viacheslav_mihalich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, Sergei.Agalakov, за способ!
Наверно то, что нужно.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Упростить SELECT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]