powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Многоступенчатая выборка
25 сообщений из 36, страница 1 из 2
Многоступенчатая выборка
    #32327104
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Необходимо осуществить поиск в таблице "Заказы", потом по отфильтрованным заказам необходимо осуществить поиск в таблице "Касса".
На данный момент я реализовал это так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
                Set r = Forms![НС_список заказов].RecordsetClone
                Str3 =  "SELECT * FROM Cash WHERE " 
                r.MoveFirst
                    Do Until r.EOF
                        Str3 = Str3 +  "Cash.[Реф №] = '" & r![Реф №] & "' OR "      ' [Реф №] - это ID заказа'
                        r.MoveNext
                    Loop
                    Str3 = Str3 &  ";" 
                    I1 = InStr(Str3,  ";" )
                    Str3 = Left(Str3, I1 -  5 )
                Set r2 = CurrentDb.OpenRecordset(Str3)

Это хорошо пока заказов мало, а если их будет хотя бы 500, то ошибка: "Слишком сложный запрос".
Какие есть идеи по оптимизации?
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327114
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
                    Str3 = Str3 &  ";" 
                    I1 = InStr(Str3,  ";" )
                    Str3 = Left(Str3, I1 -  5 )

На этот изврат не обращайте внимание :)
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327130
Bolda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а одним запросом с обьединением таблиц это сделать нельзя?
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327134
Bolda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
напиша по подробнее структуру таблиц
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327154
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не выспался наверное :)
Спасибо
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327169
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут есть другая проблема.

результат примерно такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
Заказ.Реф №     Заказ.Количество      Касса.Приход    Касса.Расход
     1 \ 23                 2                     45                      
     1 \ 23                 2                                     56 
     1 \ 23                 2                     78    
     2 \ 43                 3                     65 
     2 \ 43                 3                                     98 

Далее мне необходимо провести анализ, т.е., например, посчитать общее кол-во путевок "Заказ.Количество", а как это сделать, если эти числа дублируются?
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327184
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле тут вообще полная задница получается, на самом деле во вторичной выборке поиск идет в двух таблицах (Банк и Касса), т.е. дублируется вообще вся информация :(
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327206
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю вернуться к началу топика...
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327460
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>результат примерно такой:
Заказ.Реф № Заказ.Количество Касса.Приход Касса.Расход
1\23 2 45
1\23 2 56
1\23 2 78
2\43 3 65
2\43 3 98

А если сгруппировать по Заказ.Реф № ???
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327472
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я правильно понял вопрос, то ответ на него называется лефт джойн.
Select * from cash left join (select * from orders where ...) on (cash.RefN=orders.RefN)
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327475
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор писал:Предлагаю вернуться к началу топика...

Вместо OR попробуй IN.

Или используй forms("MyForm").Filter как условие отбора записей по кассе. А далее и вправду Group By напрашивается.
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327608
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
Заказ.Реф №     Заказ.Количество      Касса.Приход    Касса.Расход
     1 \ 23                 2                     45                      
     1 \ 23                 2                                     56 
     1 \ 23                 2                     78    
     2 \ 43                 3                     65 
     2 \ 43                 3                                     98 

Какой тут в попу Group By? :)
Если добавить Group By, то ничего не измениться!!!

-----
Вот такой лэфт джойн приводит к описанному выше.
Код: plaintext
1.
2.
SELECT Orders.*, Cash.*, Bank.*
FROM (Orders LEFT JOIN Bank ON [Orders].[Реф №]=[Bank].[Реф №]) LEFT JOIN Cash ON [Orders].[Реф №]=[Cash].[Реф №]
WHERE ((([Orders].[Реф №])=[Forms]![форма3]![ref]))

----

Geo
Ошибка синтаксиса там где-то
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327712
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тады попробуй покувыркайся с коррелирующими запросами типа:

Select t1.[Реф №], t1.Количество, (Select Касса.Приход From
Касса Where t1.[Реф №] = Касса.[Реф №]) As Приход,(Select
Касса.Расход From
Касса Where t1.[Реф №] = Касса.[Реф №]) As Расход
From Заказ
Where...
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327714
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон!

From Заказ As t1
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327717
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять Пардон! Не зная структуры...
Может быть и так
Select t1.[Реф №], Count(t1.[Реф №]) as Количество, (Select Касса.Приход From
Касса Where t1.[Реф №] = Касса.[Реф №]) As Приход,(Select
Касса.Расход From
Касса Where t1.[Реф №] = Касса.[Реф №]) As Расход
From Заказ As t1
Where...
Group By t1.[Реф №]
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327722
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И, наконец, последний пардон!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Select t1.[Реф №], Count(t1.[Реф №]) as Количество, 
   (Select 
   Sum(Касса.Приход) From 
    Касса Where t1.[Реф №] = Касса.[Реф №]) As Приход, 
  (Select Sum(Касса.Расход) From 
    Касса Where t1.[Реф №] = Касса.[Реф №]) As Расход 
From Заказ As t1 
Where... 
Group By t1.[Реф №]
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327729
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мистер Пардон
---
С запросами косяк
Решил написать функцию, создающуюю временную таблицу и засовывающую туда то, что нужно :)
Спасибо
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327731
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мистер многоступенчатая выборка!

А ты их попробовал?
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327738
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор писал:Решил написать функцию, создающуюю временную таблицу и засовывающую туда то, что нужно
В mdb при многопользовательском доступе кучу всего предусмотреть придется. А запросы, того типа, что я тебе настругал у меня работают без проблем и быстро.
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327743
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю эти вложенные Select с Where будут изрядно тормозить, если таблица более менее приличиная, в своих запросах я очень часто поэтому отказываюсь от таких сложных запросов в пользу скорости через создание временных таблиц.
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327752
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Select t1.[Реф №], Count(t1.[Реф №]) as Количество, 
   (Select 
   Sum(cash.Приход) From 
    cash Where t1.[Реф №] = cash.[Реф №]) As Приход, 
  (Select Sum(cash.Расход) From 
    cash Where t1.[Реф №] = cash.[Реф №]) As Расход 
From orders As t1 
Where orders.[Реф №] = forms!форма3!ref
Group By t1.[Реф №]

Такой запрос возвращает недублирующуюся информацию, но по всем заказам ([Реф №])
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327762
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор писал:Думаю эти вложенные Select с Where будут изрядно тормозить
Если их формировать на клиенте, то, наверное. Но, если mdb, то как создавать временные таблицы для многопользовательской работы?
Create Table #Tb1 здесь не прокатит. Значит будет создаваться постоянная таблица (а ну как ее уже другой создает?). Проверять наличие? Добавлять RND()? Отнюдь не гарантия уникальности...
И потом лучше все-таки проверить на своей БД, что быстрее работает сложный (кстати не супер) запрос или создание таблицы, заполнение, затем выборка из нее.
Хотя в adp я очень часто их использую, чтобы не заморачиваться со сложными запросами.
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327776
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри условие!

автор писал: потом по отфильтрованным заказам

Forms("FormName").Filter - возвращает строку фильтра по форме FormName
попробуй эту конструкцию подставить в Where (врать не буду, сам не пробовал вставлять в сохраненный запрос) а уж при формировании запроса программно подставить это в условия и вовсе нет проблем, как "мне ка-а-а-ается".
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327801
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Forms("FormName").Filter
Форма не имеет иточника данных.
---
Количетсво заказов в выборке колеблется от 0 до бесконечности :).
В таком запросе это можно учесть только путем предложенным мною в начале топика. А этот "путь" не поддерживает большое число заказов.
...
Рейтинг: 0 / 0
Многоступенчатая выборка
    #32327836
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор писал:Forms("FormName").Filter
Если фильтруется вложенная форма, тогда Forms("FormName").SubForm1.Form.Filter
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Многоступенчатая выборка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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