gpt4 book ai didi

ms-access - MS Access Inner Join 无法识别小写字母和大写字母的区别?

转载 作者:行者123 更新时间:2023-12-02 23:57:29 29 4
gpt4 key购买 nike

正如标题所示,此问题发生在 MS Access 2003 SP1 中。有谁知道这个问题有什么解决办法吗?

伪查询从 a.id=b.id 上的内连接 b 中选择 *

最佳答案

对于小型数据集,有许多使用各种可能的字符串转换的方法。

但是,如果您的数据集任意大小,这都会非常慢,因为它无法使用索引。

您可以通过不区分大小写地加入然后使用标准来测试大小写是否相同来进行优化,例如:

  SELECT * 
FROM a INNER JOIN b ON a.id=b.id
WHERE Asc(a.id) <> Asc(b.id)

这至少允许使用索引连接,这样您就不会比较“a”与“b”以及“a”与“c”(就像连接字符串函数的情况一样),但是只有“a”到“a”和“a”到“A”。

我建议,如果您的数据确实需要区分大小写,那么您可能需要将其存储在可以区分连接中大小写的数据库引擎中,然后将 SQL 从 Access 传递到该数据库引擎(使用直通查询) ,例如)。

编辑:

@apenwarr 建议在 JOIN 中使用 StrComp() (就像 @butterchicken 昨天所做的那样),这个 SQL 给我提出了一个问题(我已经更新了她/他的 SQL 以使用与上面相同的表和字段名;它是本质上与 @butterchicken 的 SQL 相同)

  SELECT * 
FROM a INNER JOIN b
ON a.id = b.id
AND StrComp(a.id, b.id, 0) = 0

事实上,Jet 将优化索引上的 JOIN,其方式与优化等效 WHERE 子句(即隐式 JOIN)的方式完全相同。精简到仅 JOIN(大概是在索引字段上),这两个 SQL 语句将由 Jet 进行相同的优化:

  SELECT * 
FROM a INNER JOIN a
ON a.id = b.id

SELECT *
FROM a, b
WHERE a.id = b.id

我的问题是这三者是否会进行相同的优化:

  SELECT * 
FROM a INNER JOIN b
ON a.id = b.id
AND StrComp(a.id, b.id, 0) = 0

SELECT *
FROM a INNER JOIN b
ON a.id = b.id
WHERE StrComp(a.id, b.id, 0) = 0

SELECT *
FROM a, b
WHERE a.id = b.id
AND StrComp(a.id, b.id, 0) = 0

我使用 SO 是为了避免明天要做的工作,所以没有时间创建示例数据库并设置 SHOWPLAN 来测试它,但 OP 绝对应该尝试一下并报告回到结果(假设他/她肯定打算用 Jet 来做这件事)。

关于ms-access - MS Access Inner Join 无法识别小写字母和大写字母的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1193634/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com