代码之家  ›  专栏  ›  技术社区  ›  David Hay

访问查询中的表联接是否中断ORDERBY子句?

  •  2
  • David Hay  · 技术社区  · 16 年前

    我有个问题一直困扰着我。当我对Access数据库运行以下查询时:

    SELECT *
    FROM PreferredSpacer INNER JOIN SpacerThickness ON  PreferredSpacer.SpacerTypeID = SpacerThickness.SpacerTypeID
    ORDER BY PreferredSpacer.UnitTypeID DESC
    

    (unittypeid字段是文本类型)

    结果并不像正常人所期望的那样。关于unittypeid字段,它们到处都是(在以“c”和“m”开头的条目之间有以“w”开头的条目)。如果删除连接并尝试在preferredspacer表(包含unittypeid字段)中排序记录,就会得到预期的结果,因此必须假设连接与之相关。

    同时,我真的无法想象一个工具作为AccuQuess作为Access会有这样一个明显的问题,一个相当基本的查询。但是,如果我做错了什么,我就看不出可能是什么。

    如有任何帮助,将不胜感激。谢谢。

    8 回复  |  直到 16 年前
        1
  •  2
  •   David Hay    16 年前

    我想出来了。我们的客户用来生成访问数据库的工具不正确地将SQL中的VARCHAR字段转换为Access中的备忘录字段(而不是文本,正如我们的工具所做的那样),并且备忘录字段没有正确排序。然而,我觉得奇怪的是,访问将只是默默地进行,而不是试图表明一种备忘录将不会如预期的那样工作,但这就是生活。

    谢谢大家的回复。

        2
  •  1
  •   Fionnuala    16 年前

    是科特还是沙皇?否则,它看起来按要求降序排列。YesNo?

        3
  •  0
  •   Zebra North    16 年前

    间隔厚度是否有UnitTypeID列?如果是这样,select中的“*”可能意味着它在preferredspacer.unittypeid上排序,但选择了spacertheckness.unittypeid。尝试直接选择preferredspacer.unittypeid。

        4
  •  0
  •   David Hay    16 年前

    不幸的是,unittypeid字段只存在于preferredspacer表中。

        5
  •  0
  •   databyss    16 年前

    我看不出这个查询有什么问题。

    联接表的大小是否可能大于access愿意处理的大小?

        6
  •  0
  •   David Hay    16 年前

    我试着重写它正如你所说:[编辑:这是一个帖子被删除的回应,但内容仍然有效。

    SELECT PreferredSpacer.UnitTypeID
    FROM PreferredSpacer, SpacerThickness
    WHERE PreferredSpacer.SpacerTypeID = SpacerThickness.SpacerTypeID
    ORDER BY PreferredSpacer.UnitTypeID DESC
    

    我仍然得到同样的结果。下面是一些结果的C&P,如果这对任何人都有帮助的话。

    CPATA
    CPATA
    CFRSA
    CFRSA
    CFRSA
    CFRSA
    CFRSA
    CFDOT
    CFDOT
    CFDOT
    CFDOT
    CFDOT
    CFDOAVSL
    CFDOAVSL
    CFDOAVSL
    CFDOAVSL
    CFDOAVSL
    CFDOA
    CFDOA
    CFDOA
    CFDOA
    CFDOA
    CFDIAVSL
    CFDIAVSL
    CFDIAVSL
    CFDIAVSL
    CFDIAVSL
    CFDIA
    CFDIA
    CFDIA
    CFDIA
    CFDIA
    CFDAT
    CFDAT
    CFDAT
    CFDAT
    CFDAT
    CBPATA
    CBPATA
    CBPATA
    CBPATA
    CBPATA
    CBFRSA
    CBFRSA
    CBFRSA
    CBFRSA
    CBFRSA
    CAPURE
    CAPURE
    CAPURE
    CAPURE
    CAPURE
    CADGU
    CADGU
    CADGU
    CADGU
    CADGU
    CADGS
    CADGS
    CADGS
    CADGS
    CADGS
    COTR
    COTR
    COTR
    COTR
    

    正如你所看到的,结果似乎没有遵循任何有意义的整体顺序。

        7
  •  0
  •   David Hay    16 年前

    Reouou:它在O上,而不是0,但是即使它有更多的条目遍及整个结果集(我只是粘贴了它的一部分来说明,整件事情大约1000行)。

    to dummy:sql具有varchar类型,这是在那里用于此类型数据的类型。然而,acccess只有文本数据类型来覆盖长字符串和短字符串。此外,如果我只在preferredspacer表(这是一个包含unittypeid字段的表)上执行order by,那么它也可以工作,只有当我执行join时,它才会崩溃。

        8
  •  -1
  •   dummy    16 年前

    Google 说:

    不能在文本、NTY或图像字段上执行命令(这些字段实际上是指针)。

    它是关于mssql的,但我想访问也是一样的。