我对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
我得到:定义了太多字段
我不明白......我正在选择确切数量的字段,这个错误来自哪些人?
提前致谢 干杯
答案 0 :(得分:2)
也许这个问题与您的 JOINS 无关,但与您的 UNIONS 无关!
我用Google搜索了您的错误消息,发现了这个:http://www.mvps.org/access/tables/tbl0002.htm。鉴于你有这么多领域......也许这就是问题所在?请注意,各篇文章都讨论了MS Access的 INTERNAL 字段数。也许各种UNION ALL子句受到内部字段数的限制
答案 1 :(得分:0)
我不知道这是否有帮助,但我认为你不会从左连接查询获得任何结果,这需要左连接列为空,而右连接查询则相同右连接列为空,这似乎是在这里发生的事情。也许尝试切换左右连接?
答案 2 :(得分:0)
看看这个article。它很好地解释了所有不同的连接。
在你的情况下,你为什么不使用完整的外连接?
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
答案 3 :(得分:0)
既然你已经发现问题出在UNIONs上(评论Spiny Norman的答案),我认为你唯一的选择就是临时表(尽管你可能想要永久定义它的结构,然后保证有效用途)在重新填充之前总是清楚它。然后将每个查询作为插入运行(如果不使用永久结构,可以将第一个作为生成表),并从中选择最终结果。
答案 4 :(得分:0)
你是否得到了另一种方法的答案可能在于将它们分开并在记录集中组合。
Set rs = db.OpenRecordset(SQL1)
Set rs1 = db.OpenRecordset(SQL2)
Set rs2 = db.OpenRecordset(SQL3)
.......