Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Странности SELECT LIST в запросе с DISTINCT / 7 сообщений из 7, страница 1 из 1
06.07.2021, 15:41
    #40082146
Softologic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странности SELECT LIST в запросе с DISTINCT
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
06.07.2021, 15:43
    #40082148
Softologic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странности SELECT LIST в запросе с DISTINCT
Параметры все же укажу на всякий:
...
Рейтинг: 0 / 0
06.07.2021, 15:52
    #40082152
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странности SELECT LIST в запросе с DISTINCT
Softologic,

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

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

Попробуй select list() обернуть в substring().
...
Рейтинг: 0 / 0
06.07.2021, 16:10
    #40082159
Softologic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странности SELECT LIST в запросе с DISTINCT
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
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Странности SELECT LIST в запросе с DISTINCT / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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