Определено слишком много полей - PullRequest
0 голосов
/ 13 декабря 2010

У меня странная проблема с MS access 2007. Если я запускаю следующий запрос:

SELECT QUERY_LNK_ORDERS_ITEMS.*, QUERY_LNK_ERASALES_ERACOND.*
FROM QUERY_LNK_ORDERS_ITEMS
INNER JOIN QUERY_LNK_ERASALES_ERACOND
ON QUERY_LNK_ORDERS_ITEMS.concat = QUERY_LNK_ERASALES_ERACOND.concat

Это работает, никаких проблем, тогда я хочу включить отсутствующие записи с левым / правым соединением, поэтому я запускаю:

SELECT QUERY_LNK_ORDERS_ITEMS.*, QUERY_LNK_ERASALES_ERACOND.*
FROM QUERY_LNK_ORDERS_ITEMS
INNER JOIN QUERY_LNK_ERASALES_ERACOND
ON QUERY_LNK_ORDERS_ITEMS.concat = QUERY_LNK_ERASALES_ERACOND.concat
UNION ALL
SELECT QUERY_LNK_ORDERS_ITEMS.*, QUERY_LNK_ERASALES_ERACOND.*
FROM QUERY_LNK_ORDERS_ITEMS
LEFT JOIN QUERY_LNK_ERASALES_ERACOND
ON QUERY_LNK_ORDERS_ITEMS.concat = QUERY_LNK_ERASALES_ERACOND.concat
WHERE QUERY_LNK_ORDERS_ITEMS.concat IS NULL
UNION ALL
SELECT QUERY_LNK_ORDERS_ITEMS.*, QUERY_LNK_ERASALES_ERACOND.*
FROM QUERY_LNK_ORDERS_ITEMS
RIGHT JOIN QUERY_LNK_ERASALES_ERACOND
ON QUERY_LNK_ORDERS_ITEMS.concat = QUERY_LNK_ERASALES_ERACOND.concat
WHERE QUERY_LNK_ERASALES_ERACOND.concat IS NULL

И я получаю: слишком много полей определено

Не понимаю ... Я выбираю точное количество полей, откуда эта ошибка, ребята?

Заранее спасибо Приветствия

Ответы [ 5 ]

2 голосов
/ 13 декабря 2010

Возможно, проблема не имеет ничего общего с вашими СОЕДИНЕНИЯМИ , но с вашими СОЮЗАМИ !

Я погуглил ваше сообщение об ошибке и обнаружил следующее: http://www.mvps.org/access/tables/tbl0002.htm. Учитывая, что у вас так много полей ... Может быть, в этом проблема? Обратите внимание, что в различных статьях говорится о количестве полей INTERNAL в MS Access. Возможно, различные предложения UNION ALL ограничены количеством внутренних полей

0 голосов
/ 06 декабря 2017

Получили ли вы ответ на этот вопрос, другой путь может заключаться в их разделении и объединении в набор записей.

Set rs = db.OpenRecordset(SQL1)
Set rs1 = db.OpenRecordset(SQL2)
Set rs2 = db.OpenRecordset(SQL3)
 .......
0 голосов
/ 13 декабря 2010

Поскольку вы обнаружили, что проблема связана с UNIONs (прокомментируйте ответ Spiny Norman), я думаю, что единственным вариантом будет временная таблица (хотя вы, возможно, захотите предварительно определить ее структуру, а затем убедитесь, что допустимые значения используются всегда очищайте его перед повторным заселением). Затем запустите каждый из ваших запросов как вставку (возможно, с первым в качестве рабочей таблицы, если вы не используете постоянную структуру), и выберите из этого свой конечный результат.

0 голосов
/ 13 декабря 2010

Взгляните на эту статью . Это довольно хорошо объясняет все различные соединения.

В вашем случае, почему бы вам не использовать полное внешнее объединение?

SELECT QUERY_LNK_ORDERS_ITEMS.*, QUERY_LNK_ERASALES_ERACOND.*
FROM QUERY_LNK_ORDERS_ITEMS
FULL OUTER JOIN QUERY_LNK_ERASALES_ERACOND
ON QUERY_LNK_ORDERS_ITEMS.concat = QUERY_LNK_ERASALES_ERACOND.concat
0 голосов
/ 13 декабря 2010

Я не знаю, помогает ли это, но я не думаю, что вы могли бы получить какие-либо результаты от запроса на левое соединение, для которого левый столбец соединения должен быть нулевым, и то же самое для запроса на правое соединение, где Правый столбец соединения равен нулю, что, похоже, и происходит здесь. Может быть, попробуйте переключить левое и правое соединения?

...