【发布时间】:2010-12-13 10:42:22
【问题描述】:
我对 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
我得到:定义的字段太多
我不明白...我正在选择确切数量的字段,这个错误来自哪里?
提前致谢 干杯
【问题讨论】:
-
尝试使用明确的列列表...
-
嗨,米奇,问题是我有一个非常长的列表,哈哈事实上,如果我只尝试一两个字段,它可以工作,但如果我包含所有内容,则不会
-
不尊重 MS 或您自己,Access 不是一个功能齐全的数据库产品。它旨在供非技术用户简单使用,并且做得很好 - 但这些产品经常被用于它们不是为它们设计的东西。如果您尝试模拟完全连接(如下所述),那么您显然在技术上很复杂,您应该使用更好的数据库产品。我强烈建议您尝试其他可以更好、更轻松地完成这项工作的数据库。
-
嗨,鲍勃,完全没有冒犯的意思,你说的是正确和直接的。你唯一不知道的是,MS 访问是我项目中的业务需求,所以我不能使用另一个数据库,我必须坚持下去,而且……让它以某种方式工作:)。谢谢你的亮点;)
-
@Bob Jarvis:虽然 Access 确实可供新手用户使用,但它也是一个强大的开发平台,非新手的开发人员可以做很多事情。 Jet/ACE 是数据库引擎,它确实有它的局限性(以及它自己的 SQL 方言),但这些在这里并不真正相关。在我看来,数据架构是一个糟糕的设计。
标签: sql ms-access ms-access-2007 join