gpt4 book ai didi

ms-access - 为什么 DISTINCT 改变文字字符串的大小写

转载 作者:行者123 更新时间:2023-12-04 08:16:24 26 4
gpt4 key购买 nike

我对 Access 数据库进行了以下简化查询:

  • 构建表:CREATE TABLE test (id TEXT)
  • 填充:INSERT INTO test VALUES ('4711')
  • 查询:

  • SELECT
    id,
    'value',
    'Value'
    FROM
    test
    产量


    ID
    Expr1001
    Expr1002


    4711
    值(value)



    现在与 DISTINCT 相同的查询更改第二个文字字符串的大小写:
    SELECT DISTINCT
    id,
    'value',
    'Value'
    FROM
    test
    产量


    ID
    Expr1001
    Expr1002


    4711
    值(value)



    无论查询是通过 OleDb 还是直接通过 MS Access,结果都是一样的。数据库引擎如何更改文字值?我知道 jet sql 有时很奇怪 - 但这在我看来就像一个错误。还是在某处描述了这种行为?

    最佳答案

    这主要是猜测,但我认为正在发生的事情如下:SELECT DISTINCT x等于 SELECT x GROUP BY x并转换为它。GROUP BY中的列重复数据删除,'value'等于 'Value'根据整理规则,因此只处理第一次出现。
    对于每一列,它要么是一个常量(计算一次)、一个聚合列(为每个组计算),要么是一个组列。自 'value'GROUP BY'Value'等于 'value' ,这些都映射到组 'value'当按单个列分组时,我们也可以看到这种行为:

    SELECT
    id,
    'value',
    'Value'
    FROM
    test
    GROUP BY
    id
    GROUP BY 子句中没有“值”,解析为表达式


    ID
    Expr1001
    Expr1002


    4711
    值(value)



    SELECT
    id,
    'value',
    'Value'
    FROM
    test
    GROUP BY
    id, 'valuE'
    'value''valuE'相等,因此 Expr1001 是组列 'valuE ,同样适用于 'Value'

    ID
    Expr1001
    Expr1002


    4711
    值(value)
    值(value)


    来自 GROUP BY 的字符串子句被使用,即使两个字符串都不使用大写。
    然而,据我所知,这种行为没有记录在案。记录的是在评估组时忽略大写,例如你可以做 SELECT ID, MAX(SomeColumn) FROM MyTable GROUP BY id并且 Access 不会提示没有 ID GROUP BY中的列条款,但奇怪的是这适用于常量和 DISTINCT以及。明显的解决方法是:不要按常量分组,使用 GROUP BY而不是 DISTINCT当您有 SELECT带有常量的子句。
    如果我们将此行为与 T-SQL 进行比较,它不允许在 GROUP BY 中使用常量。部分,因此不会遇到这种行为。 GROUP BY id, 'valuE'不是有效的 T-SQL。

    关于ms-access - 为什么 DISTINCT 改变文字字符串的大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65683843/

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