powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Объединить результаты двух запросов в одном
8 сообщений из 8, страница 1 из 1
Объединить результаты двух запросов в одном
    #39549531
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблицы Journaldoc и Tabledoc. Первая содержит инфу о всех документах в системах - приходных и расходных. Вторая - табличная часть каждого документа - список проданных или поступивших товаров с ценами, сроком годности и т.д.
Есть вот такой вопрос по отдельно приходным документам

Код: sql
1.
2.
3.
4.
5.
6.
select TABLEDOC.ID_SPRTOVARA, TABLEDOC.id_sprproizv, TABLEDOC.id_sprserii, TABLEDOC.goden_do, TABLEDOC.cena, max(JOURNALDOC.Datedoc)
from TABLEDOC
inner join JOURNALDOC on (JOURNALDOC.ID = TABLEDOC.ID_DOC)
where ((JOURNALDOC.PROVEDEN = 1) and
      (JOURNALDOC.ID_TYPEDOC = 1 and journaldoc.perenos is null))
group by TABLEDOC.ID_SPRTOVARA, TABLEDOC.id_sprproizv, TABLEDOC.id_sprserii, TABLEDOC.goden_do, TABLEDOC.Cena



Его результаты потом используются в других запросах. Недавно выяснилось что этот запрос не учитывает одну ситуацию. Как видно в запросе есть такое условие
Код: sql
1.
journaldoc.perenos is null)


Однако в некоторых случаях нужна инфа из того документа, у которого признак journaldoc.perenos не null (он один единственный в базе всегда с номером 1)
Так вот чтобы получить нужную инфу из него написал такой запрос
Код: sql
1.
2.
3.
4.
select TABLEDOC.ID_SPRTOVARA, TABLEDOC.id_sprproizv, TABLEDOC.id_sprserii, TABLEDOC.goden_do, TABLEDOC.cena from
(select TABLEDOC.id_sprtovara as ids  from TABLEDOC group by TABLEDOC.id_sprtovara having count(TABLEDOC.id_sprtovara)=1) as pn
inner join TABLEDOC
on (TABLEDOC.id_doc = 1) and (pn.ids = TABLEDOC.id_sprtovara)



Так вот вопрос - как мне можно соединить это все в один запрос, чтобы результатом был соответственно результат первого запроса + результат второго запроса?
П.С. Еще как-то надо решить проблему, с получением max(JOURNALDOC.Datedoc) для второго запроса, чтобы кол-во столбцов было одинаковое
...
Рейтинг: 0 / 0
Объединить результаты двух запросов в одном
    #39549552
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт2010как мне можно соединить это все в один запрос
RTFM union all
арт2010Еще как-то надо решить проблему, с получением max(JOURNALDOC.Datedoc) для второго запроса, чтобы кол-во столбцов было одинаковое
А тут нужно подумать...
...
Рейтинг: 0 / 0
Объединить результаты двух запросов в одном
    #39549579
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт2010,

а вот что-то подобное
Код: sql
1.
2.
3.
where JOURNALDOC.PROVEDEN = 1 and
     ((JOURNALDOC.ID_TYPEDOC = 1 and journaldoc.perenos is null) OR
      JOURNALDOC.ID = 1)



мне кажется проще
ну или я невнимательно читал?
...
Рейтинг: 0 / 0
Объединить результаты двух запросов в одном
    #39549592
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m7m, нет, из этого документа переноса, у которого id всегда = 1 и свойство perenos не null нужны только строго определенные позиции (которые встречаются 1 раз и причем только в нем - это тоже важное условие).
А во всех остальных случаях (то есть если какой-то товар встречается больше 1 раза за весь требуемый период либо встречается 1 раз, но не в документе переноса), второе условие не должно срабатывать
...
Рейтинг: 0 / 0
Объединить результаты двух запросов в одном
    #39549607
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, со вторым разобрался, сейчас попробую union all, спасибо
...
Рейтинг: 0 / 0
Объединить результаты двух запросов в одном
    #39549615
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт2010,

поскольку общий результат выборки из двух запросов совсем разный (во всяком случае, я не вижу ничего объединяющего), то поможет union all. А на место max ставь просто 0 и всё.
...
Рейтинг: 0 / 0
Объединить результаты двух запросов в одном
    #39549649
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7m
Код: sql
1.
2.
3.
where JOURNALDOC.PROVEDEN = 1 and
     ((JOURNALDOC.ID_TYPEDOC = 1 and journaldoc.perenos is null) OR
      JOURNALDOC.ID = 1)


А потом сравнить планы такой выборки с той, что будет c union all...
...
Рейтинг: 0 / 0
Объединить результаты двух запросов в одном
    #39549686
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanm7m
Код: sql
1.
2.
3.
where JOURNALDOC.PROVEDEN = 1 and
     ((JOURNALDOC.ID_TYPEDOC = 1 and journaldoc.perenos is null) OR
      JOURNALDOC.ID = 1)



А потом сравнить планы такой выборки с той, что будет c union all...

не буду сравнивать планы ибо
"нет, из этого документа переноса, у которого id всегда = 1 и свойство perenos не null нужны только строго определенные позиции (которые встречаются 1 раз и причем только в нем - это тоже важное условие).
А во всех остальных случаях (то есть если какой-то товар встречается больше 1 раза за весь требуемый период либо встречается 1 раз, но не в документе переноса), второе условие не должно срабатывать "
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Объединить результаты двух запросов в одном
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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