这是我在这里的第一篇文章,我是一名数据库新手。我试图找到答案,但我不确定我是否理解它如何适用于我的案例。
我的访问程序生成一个包含不同类型字段(自动编号,短文,备忘录)的查询,然后用于创建报告。
它一直运作良好,但由于数据库已经增长,我遇到了一个问题。
我使用ID(主键)IN()where条件来过滤报告。我创建一个长字符串来获取所选记录的所有ID:
WHERE ID IN (1200,1201,1203,1226,1227,1228,1229,...)
当达到查询中的一定数量的字符(大约4000)时,我得到中文字符而不是所有备忘录字段,只有查询结果的备忘录字段(然后在报告中)。
查询大小是否有限制?不是32000个字符吗? 为什么只有选择太多记录才能显示这些字符?
是否存在可以帮助我减少查询长度的IN()替代,还是应该完全避免备注字段?
编辑:这是查询(删除一点可读):
SELECT ObjetsLegislatifs.IDobjet, ObjetsLegislatifs.TitreObjet, ObjetsLegislatifs.ContenuObjet
FROM ObjetsLegislatifs
WHERE IDobjet IN(1200,1201,1203,1226,1227,1228,1229,1230,1231,1232,)
GROUP BY ObjetsLegislatifs.IDobjet, ObjetsLegislatifs.TitreObjet, ObjetsLegislatifs.ContenuObjet
ORDER BY ObjetsLegislatifs.IDobjet;
基本上,IDobjet是一个自动编号," TitreObjet"和#34; ContenuObjet"是备忘录字段。 虽然IDobjet始终显示正确的数字,但当查询太长时,达到某个阈值时,备注字段将开始显示中文。我在查询中尝试使用文本字段,它们工作正常。
答案 0 :(得分:2)
您要做的最好的事情是使用一个ID
列创建一个临时表(这是一种特殊类型的表 - 请参阅here)。
生成查询时,您可以将ID
插入此表并加入其中,而不是使用IN list
,如下所示:
select a.*
from table a
INNER JOIN temp_table b ON a.ID = b.ID