Объединение нескольких запросов, которые выбираются из связанных таблиц в Access - PullRequest
0 голосов
/ 17 октября 2019

TLDR: Как я могу UNION ALL получить результаты нескольких кросс-таблиц, которые опираются на большие таблицы, связанные с MySQL?

У меня есть 6 кросс-таблиц в MS Access, которые возвращают около 100поля (я не в состоянии изменить эти запросы). Эти перекрестные запросы выбирают данные из связанных таблиц, которые находятся на сервере MySQL. Я хочу объединить все эти запросы в один вывод, используя UNION ALL.

Сначала я попробовал следующий код:

SELECT
  *
FROM
  query_1
UNION ALL
SELECT
  *
FROM
  query_2
UNION ALL
SELECT
  *
FROM
  query_3
UNION ALL
SELECT
  *
FROM
  query_4
UNION ALL
SELECT
  *
FROM
  query_5
UNION ALL
SELECT
  *
FROM
  query_6

В соответствии с этим сообщением ( UNION ALL запрос: «Определено слишком много полей» ), это не работает из-за «ошибки слишком большого количества полей». По сути, поскольку каждый запрос возвращает около 100 полей, объединение 3 или более запросов превышает ограничение в 255 полей MS Access.

Моей следующей попыткой было обойти код следующим образом:

SELECT
  *
FROM
  (
    SELECT
      *
    FROM
      query_1
    UNION ALL
    SELECT
      *
    FROM
      (
        SELECT
          *
        FROM
          query_2
        UNION ALL
        SELECT
          *
        FROM
          query_3
      ) AS a
  ) AS b
UNION ALL
SELECT
  *
FROM
  (
    SELECT
      *
    FROM
      query_4
    UNION ALL
    SELECT
      *
    FROM
      (
        SELECT
          *
        FROM
          query_5
        UNION ALL
        SELECT
          *
        FROM
          query_6
      ) AS c
  ) AS d;

Это обходит ошибку «слишком много полей», но приводит к ошибке «ODBC - вызов не выполнен»«MySQL] [драйвер ODBC 8.0 (w)] [mysqld-8.0.18] У вас есть ошибка в синтаксисе SQL; проверьте соответствующее руководство ...» Я считаю, что эта ошибка связана с тем, что Access не играет красивос большими связанными таблицами из MySQL, потому что я столкнулся с той же ошибкой, когда пытался объединить несколько таблиц, например, так:

SELECT
  *
FROM
  table_1
UNION ALL
SELECT
  *
FROM
  table_2
...
UNION ALL
SELECT
  *
FROM
  table_6

При объединении таблиц я обошел эту проблему, изменив запрос объединения насквозной запрос. Это прекрасно работало, когда я объединял таблицы, но не работало при объединении результатов кросс-таблиц. Попытка сквозного подхода здесь просто дает мне неинформативную ошибку «ODBC - вызов не выполнен». Я предполагаю, что это связано с невозможностью включить перекрестные запросы в сквозной запрос, но я не уверен.

Большое спасибо за любую помощь.

Некоторые дополнительные примечания, основанные на комментариях:

-Код работает нормально, если я пытаюсь объединить только 2 запроса, 3 или более причин ошибок.

- Запросы удовлетворяют следующим требованиям для UNION: 1) Каждый оператор SELECT в UNION должен иметь одинаковое количество столбцов 2) Столбцы также должны иметь одинаковые типы данных 3) Столбцы в каждом утверждении SELECTтакже должны быть в том же порядке.

- Результаты каждого запроса имеют 109 полей (3 поля varchar, 3 поля целых чисел и 103 поля с плавающей запятой)

...