Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: "Слишком сложный запрос"?

Доброго дня, кто подскажет почему при создании нового запроса выскакивает "слишком сложный запрос"?? такое происходит даже если в запрос добавить просто вывести запись из существующей таблицы.
Ответ: ой, вспомнил случаи из жизни, часио бывает. чтьо если не через форму. а просто в таблице или запросе данные наобум вводятся. то такое тоже бывает, еще если в самой таблице - значение по умолчанию прописано.
не факт. что это именно ваш случай, но провериться стоит.
Вопрос: слишком сложный запрос

Доброго дня, кто подскажет почему при создании нового запроса выскакивает "слишком сложный запрос"?? такое происходит даже если в запрос добавить просто вывести запись из существующей таблицы.

К сообщению приложен файл (Database31.rar - 82Kb)
Ответ: да использовала но 8 запросов работают. С подстановками все вроде б предельно просто, ошибок не нашла.
Вопрос: "Слишком сложный запрос"? - MS Access

Сколько столбцов может в себе содержать запрос? больше 36 пишет "слишком сложный запрос"
Ответ:
Сообщение от PuhKMV
интересная должно быть структура у БД, глянуть бы хоть одним глазком.
без базы --даже и угадывать нет смысла
Вопрос: Не создаетстя отчет по отлично работающему запросу

Всем привет! Хорошего настроения!

Access 2013.
Создал не сложный запрос. Выборка двух полей из одной таблицы, двух из другой и трех из другого запроса.
Запрос при запуске отлично и быстро работает и выдает правильный результат.
Пытаюсь создать отчет на основе этого запроса и получаю сообщение "Слишком сложный запрос", потом долго думает отчет создает (отчет-то фигня 7 полей), но при попытке запуска отчета получаю то же сообщение. ?

Мысли? Советы приму с благодарностью.
Ответ: Всем спасибо! Заработало.
Хотя конечный результат запроса состоял из 7 полей, но один из запросов обрабатывал 50 полей. Разбил все на 2 части и собрал потом, перед выводом в отчет их вместе с использованием UNION ALL. Все работает и отчет формируется.
Не уверен конечно, что дело именно в этом на 100%, но пришел к следующему выводу.... в момент формирования результата количество обрабатываемых полей при использовании разных операторов типа UNION ALL и т.д. имеет некое ограничение, в результате имеем сообщение "Слишком сложный запрос".
Вопрос: Разбить сложный запрос на несколько простых

Подскажите, пожалуйста, как правильно разбивать сложные запросы на мелкие логические части, чтобы была возможность использовать ORDER BY?
Допустим, какие средства MS SQL Server 2014 предоставляет, чтобы 3 вложенных или зависимых запроса разложить по 3 зависимым переменным?
В данный момент использую временные таблицы с помощью конструкции вида:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
IF OBJECT_ID('tempdb.dbo.#ЗапросЗалыССовпадением', 'U') IS NOT NULL
  DROP TABLE #ЗапросЗалыССовпадением; 
SELECT     Зал.[ID отеля] AS ОтельID, ЗалID, ЗалНазвание, СовпадениеВысотаПотолка, СовпадениеВысотаПотолка AS ОбщееСовпадениеЗала
INTO       #ЗапросЗалыССовпадением
FROM       Зал INNER JOIN #ЗапросЗалыСовпадениеВысотаПотолка
                ON Зал.ID = #ЗапросЗалыСовпадениеВысотаПотолка.ЗалID;
 
 
IF OBJECT_ID('tempdb.dbo.#ЗапросОтельКоличествоПодходящихЗалов', 'U') IS NOT NULL
  DROP TABLE #ЗапросОтельКоличествоПодходящихЗалов; 
SELECT ОтельID, Отель.Название AS ОтельНазвание, Count(ЗалID) AS КоличествоПодходящихЗалов
INTO #ЗапросОтельКоличествоПодходящихЗалов
FROM Отель INNER JOIN #ЗапросЗалыССовпадением
           ON Отель.ID = #ЗапросЗалыССовпадением.ОтельID
WHERE #ЗапросЗалыССовпадением.ОбщееСовпадениеЗала >= @НеобходимоеСовпадениеЗалов
GROUP BY ОтельID, Отель.Название;
Но вложенные запросы и временные таблицы не поддерживают сортировки ORDER BY.
Использование переменных через DECLARE требует большой рутины по описанию результирующей таблицы:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DECLARE @TempЗал TABLE
(
    [ID]                        INT,
    [Название]              NVARCHAR (50),
    [Высота потолка]     INT
);
INSERT INTO 
    @TempЗал 
SELECT 
    ID, 
    Название,
    [Высота Потолка]
FROM 
    Зал
ORDER BY [Высота потолка];
При этом оба способа выполняют запросы сразу, используя много дополнительной памяти.
Так, как правильно разбивать сложные запросы на мелкие логические части, чтобы была возможность использовать ORDER BY и желательно иметь преимущества отложенных вычислений, экономии памяти?
Ответ: Затруднения в этом:
1. Невозможно сделать несколько запросов к одному CTE, приходится использовать табличные переменные;
2. CTE не поддерживают ORDER BY;
3. Как оптимально сохранить эти запросы на сервере?
а) View не поддерживают объявление переменных и ORDER BY;
б) View и функции не позолят вернуть сразу 2 запроса - отели и подходящие залы.
Посмотрите, пожалуйста, запросы, чтобы понять проблемы:
Вопрос: MongoDB и сложный запрос (индекс?)

Добрый день.

Пришел за помощью в составлении индекса для сложного запроса:
+

{
  $or: [
    {
      "titlepart.fullname": {
        $in: [
          "ВАСИЛЬЕВ ВАСИЛИЙ"
        ]
      }
    },
    {
      "titlepart.oldnames": {
        $in: [
          "ВАСИЛЬЕВ ВАСИЛИЙ"
        ]
      }
    }
  ],
  $or: [
    {
      "titlepart.doc.number": {
        $in: [
          "3444 513213",
          "3444 513213"
        ]
      }
    },
    {
      "titlepart.olddocs.number": {
        $in: [
          "3444 513213",
          "3444 513213"
        ]
      }
    }
  ]
}

Структура осталась от предыдущих разработчиков, но теперь нужно учесть все возможные варианты, на которые не обратили сразу внимания и найти всех пользователей. Имеется индекс по titlepart.fullname и titlepart.doc.number, но explain говорит, что он не видит индексы для данного запроса вообще. Пробовал создавать индексы по частям из каждой из $or конструкций, аналогично, не видит индексы при explain.

Помогите советом, какой тут можно составить индекс или может я не корректно составил запрос и у Вас есть любое предложение по улучшению его?
Ответ: Коллективным умом и сотым экспериментом пришли к выводу, что для подобных запросов требуется 4 индекса для каждого поля в запросе. Составные индексы не работают. А так же всю конструкцию дополнительно обернули в дополнительный $and.

Возможно, кто-то и когда-то сюда зайдет и сможет найти ответ на данный вопрос.
Вопрос: Создание сложного запроса по связанным таблицам

Добрый день.
Продолжаю вникать в создание сложных запросов. Помогите в решении вопроса на примере:
имеем две таблицы: Накладные и Счет, связаны 1-ко многим.
Задача: создать запрос, чтобы по любой (по выбору) компании отбирались ВСЕ накладные из таблицы Накладные и только те связанные записи из таблицы Счет, в которых плательщиком (с_Плательщик) является та же фирма, что и в Накладной и строго определенные валюта и коды платежа (с_валюта=1, с_код платежа=1).
В примере есть три запроса (отчета), в которых условия объединения таблиц настроены по разному (соответственно п.1,п.2 и п.3), но добиться желаемого результата не удалось.
Спасибо.
Ответ: Pelena, виноват, видимо смотрел более старый файл.
Большое спасибо, благодаря Вашим советам задачка решается. До сих пор такой подход (вложенных запросов) не применял. Ещё раз спасибо за помощь.
Вопрос: Сложный запрос

Помогите пожалуйста создать сложный запрос, нужно получить выборку со столбцами Помещение,Оборудование, Счетчик. Если количество оборудования в комнате больше единицы необходимо дублировать строчку Помещение и Оборудование данное количество раз. Счетчик соответственно должен расставить порядковый номер около каждой записи, сортировка в первую очередь проходит по названию оборудования. Пожалуйста помогите, я в базах данных не силен уже голову сломал как это сделать.
Ответ: Спасибо за пример, хоть нумерацию в конечном итоге сделал через модуль, запрос для дублирования очень помог.
Вопрос: как сделать сложный запрос при наличии многих записей со значением поля "placenum" 1,2,3 и 9

Доброго времени суток Всезнающему Народу!
по рабочим нуждам слепил связку MYSQL(server) + MS access 2007
вопрос:

как сделать сложный запрос при наличии многих записей со значением поля "placenum" 1,2,3 и 9 (многие записи имеют одинаковые поля "busnumber"
как вытащить только со значениями 1,2,9 и вычесть со значением 3
как мне это представлялось: слепил запрос-вьюшку (стандартными средствами ms access) с названием val3 синтаксис -
SQL
1
2
3
SELECT maintable.busnumber, maintable.snnum, maintable.samnum
FROM maintable
WHERE (((maintable.placenum)=3));
и тут же сделал новый запрос где указал

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT maintable.busnumber, maintable.snnum, maintable.samnum,
 maintable_1.snnum, maintable_1.samnum, maintable_2.snnum, maintable_2.samnum
 
FROM val3
 LEFT JOIN ((maintable
 INNER JOIN maintable AS maintable_1
   ON maintable.busnumber = maintable_1.busnumber)
 INNER JOIN maintable AS maintable_2
   ON maintable_1.busnumber = maintable_2.busnumber)
   ON val3.busnumber = maintable.busnumber
 
WHERE (((maintable.busnumber)<>[val3].[busnumber])
   AND ((maintable.placenum)=9)
   AND ((maintable_1.placenum)=1)
   AND ((maintable_2.placenum)=2));
не работает... странно! почему? т.е. отображается информация полностью без учета что busnumber из val3 показывать не надо...

если связь "ON val3.busnumber = maintable.busnumber" убрать то все равно результата нет

может всемогущий ALL и EVERYBODY поможет советом???
Ответ:
Сообщение от alvk
Нипарле ничего
Понял!
Да простят меня Боги и Модераторы...
Вопрос: Сложный запрос, работающий с бинарным деревом

Вроде пустяк но запутался((( может не тот подход...

Грубо говоря есть результат работы сложного запроса работающего с бинарным деревом (изображение):

где:
lvl порядок сортировки по которому надо двигаться по возрастанию
access то что должно вернуться из запроса (0 или 1) при этом
если 1 то в проверочном поле COUNT должно быть больше 0. это значение верное
если в COUNT 0 то не верное и надо вернуть access 0

И самое главное: state
если 0 то на этом поле и закончить
если 2 то продолжить работать с другими полями (подчиняясь сортировке lvl) пока не встретиться state 1
если 1 то выбрать access из этой записи, на чем и покончить
если рядом несколько state 1 и при этом соответствующее поле nav_id у обоих равно то выдать значение последнего встретившегося поля с таким же nav_id

Указанные во вложении данные должны вернуть: 1
если в первом поле state было бы 0 или 1 то вернуть: 0
Ответ: Чет я не выспался((( Все же элементарно в хранимых процедурах\функциях делается...