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 поля с плавающей запятой)