powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Странности SELECT LIST в запросе с DISTINCT
7 сообщений из 7, страница 1 из 1
Странности SELECT LIST в запросе с DISTINCT
    #40082146
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Firebird 2.5.9.

Делаю запрос в IBEXPERT (параметры опускаю, они не столь важны в контексте):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
SELECT DISTINCT
    SPR11.NAIM,
    SPR11.UID,
    JDD.PROIZV_DATA_VR,
    JDD.KOLVO,
    JDD.SUMMA_REAL,
    JDD.SUMMA_ZAKUPKI,
    (SELECT LIST (NAIM, ', ') FROM SPRAV_02 WHERE ID IN (SELECT ID_PARENT_USER FROM JUR_DOCS_DETAIL_PROIZV WHERE ID_PARENT=JDD.ID)) AS USER_PR
FROM
   JUR_DOCS_DETAIL JDD
   LEFT JOIN JUR_DOCS_DETAIL_PROIZV JDDP
ON
   JDDP.ID_PARENT = JDD.ID
   LEFT JOIN SPRAV_11 SPR11
ON
   SPR11.ID = JDD.NOMENKL_ID
   LEFT JOIN SPRAV_111 SPR111
ON
   SPR111.ID_PARENT=JDD.NOMENKL_ID AND SPR111.MAGAZIN_ID=JDDP.ID_PARENT_MAG
   LEFT JOIN JUR_DOCS JUR
ON
   JDD.ID_PARENT=JUR.ID
WHERE
    JDD.PROIZV_REJIM=2 AND JDD.NOMENKL_ID=:NOMENKL_ID AND JUR.DOC_TIP_ID=2 AND SPR11.DELETED = 0
    AND (JDDP.ID_PARENT_USER = :ID_PARENT_USER OR :ID_PARENT_USER IS NULL)
    AND (JDDP.ID_PARENT_MAG = :PROIZV_ID OR :PROIZV_ID IS NULL)
    AND CAST(JDDP.DATA AS DATE) BETWEEN :STDATA AND :ENDDATA
    AND (JUR.OPENED_DOC_MAGAZIN_ID = :OPENED_DOC_MAGAZIN_ID OR :OPENED_DOC_MAGAZIN_ID IS NULL)
    AND (JUR.KONTRAGENT_ID = :KONTRAGENT_ID OR :KONTRAGENT_ID IS NULL)
    AND (JUR.FOTIS_ORDER_FL = :FOTIS_ORDER_FL OR :FOTIS_ORDER_FL IS NULL)
    AND (JUR.DELETED=:DELETED OR :DELETED IS NULL)



И получаю на выходе две идентичные записи:


Если же уберу из запроса строку "(SELECT LIST (NAIM, ', ') FROM SPRAV_02 WHERE ID IN (SELECT ID_PARENT_USER FROM JUR_DOCS_DETAIL_PROIZV WHERE ID_PARENT=JDD.ID)) AS USER_PR", то все корректно - на выходе одна запись:


Вопрос - почему в первом варианте на выходе две записи то?? Они же идентичны
...
Рейтинг: 0 / 0
Странности SELECT LIST в запросе с DISTINCT
    #40082148
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Параметры все же укажу на всякий:
...
Рейтинг: 0 / 0
Странности SELECT LIST в запросе с DISTINCT
    #40082152
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Softologic,

DISTINCT на блобах работать не умеет. Подзапрос отрабатывает два раза, выдаёт разные blob_id.
...
Рейтинг: 0 / 0
Странности SELECT LIST в запросе с DISTINCT
    #40082153
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Softologic,

можно попробовать ещё distinct загнать внутрь list. Но кажется это бесполезно. А можно сделать select from select.
...
Рейтинг: 0 / 0
Странности SELECT LIST в запросе с DISTINCT
    #40082156
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис, KreatorXXI, спасибо! Понял как сделать.
...
Рейтинг: 0 / 0
Странности SELECT LIST в запросе с DISTINCT
    #40082158
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Softologic,

Попробуй select list() обернуть в substring().
...
Рейтинг: 0 / 0
Странности SELECT LIST в запросе с DISTINCT
    #40082159
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vlad F,

ага, в принципе я вот так навскидку покастовал, сработало:
"(SELECT cast(LIST(NAIM, ', ') as varchar(512)) FROM SPRAV_02 WHERE ID IN (SELECT ID_PARENT_USER FROM JUR_DOCS_DETAIL_PROIZV WHERE ID_PARENT=JDD.ID)) AS USER_PR"
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Странности SELECT LIST в запросе с DISTINCT
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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