DISTINCT
Access 数据库引擎通常仅使用前 255 个字符来确定文本(“字符串”)数据的唯一性,这就是GROUP BY
截断的原因。
这个建议有点冗长,但它确实有效:将其拆分MEMO
为 255 个字符DISTINCT
的块,在这些块上使用,然后将它们再次连接在一起,例如(Access 数据库引擎 ANSI-92 查询模式语法,即子查询的括号):
SELECT DT2.MyMemoCol_1 & DT2.MyMemoCol_2 AS MyMemoCol
FROM (
SELECT DISTINCT DT1.MyMemoCol_1, DT1.MyMemoCol_2
FROM (
SELECT MID(MyMemoCol, 1, 255) AS MyMemoCol_1,
MID(MyMemoCol, 256, 255) AS MyMemoCol_2
FROM Test1
) AS DT1
) AS DT2;
已发表评论:
将备忘录分成 255 个字符的块是完全没有必要的。You can simply sort on Left(MyMemoCol, 8192) or some other appropriately chosen value for the field length returned.
好吧,在我的测试中,这根本不起作用。快速复制:
CREATE TABLE Test1 (MyMemoCol MEMO NOT NULL);
INSERT INTO Test1 (MyMemoCol) VALUES (STRING(300, 'A'));
INSERT INTO Test1 (MyMemoCol) VALUES (STRING(300, 'A') & STRING(5, 'X'));
INSERT INTO Test1 (MyMemoCol) VALUES (STRING(300, 'A'));
SELECT LEFT$(MyMemoCol, 8192)
FROM Test1
GROUP
BY LEFT$(MyMemoCol, 8192);
在 SQL-92 查询模式下使用 Access2007 .accdb ACE 引擎查询对象的 SQL 视图进行测试,查询返回单行(不正确),其值已被截断为 255 个字符(不正确)。
前面的“分块”查询返回两行(正确)而没有截断(正确)。