Sql 为什么Access有时会在查询默认列别名中包含源表名?

Sql 为什么Access有时会在查询默认列别名中包含源表名?,sql,ms-access,Sql,Ms Access,我偶尔会有一个查询,Access坚持自动在每个列前面加上源表/查询名。向源中添加别名没有帮助,因为别名只是在每个返回的列名前加上前缀。它有时发生在只有一个源的情况下,因此不可能从冲突的列名开始,但我也观察到多个表上的连接 在设计视图中创建或编辑简单查询时,可以从源表或查询中选择列,而无需指定显式别名。正如人们所期望的,返回的列假定源列的名称,并且没有附加的限定符,通常没有表名作为列名的前缀。假设在查询中只选择了一个可能冲突的列,则当联接表中的列具有相同名称时,情况更是如此 [Products]和

我偶尔会有一个查询,Access坚持自动在每个列前面加上源表/查询名。向源中添加别名没有帮助,因为别名只是在每个返回的列名前加上前缀。它有时发生在只有一个源的情况下,因此不可能从冲突的列名开始,但我也观察到多个表上的连接

在设计视图中创建或编辑简单查询时,可以从源表或查询中选择列,而无需指定显式别名。正如人们所期望的,返回的列假定源列的名称,并且没有附加的限定符,通常没有表名作为列名的前缀。假设在查询中只选择了一个可能冲突的列,则当联接表中的列具有相同名称时,情况更是如此

[Products]和[Details]都有[ID]列的示例:

SELECT Products.ID, Products.ItemName, Details.Description
FROM Products INNER JOIN Details ON Products.ID = Details.ForeignID
在这些列中显示结果

| ID | ItemName | Description |
| Products.ID | ItemName | Details.ID | Description |
| Detail.Board Order | Detail.Sales Rep | Detail.Sales Team | ...
如果默认列名发生冲突,Access会自动将结果列名作为源表的前缀,但仅适用于相互冲突的特定列:

在这些列中显示结果

| ID | ItemName | Description |
| Products.ID | ItemName | Details.ID | Description |
| Detail.Board Order | Detail.Sales Rep | Detail.Sales Team | ...
有趣的是,显式列别名中不允许使用句点,但是自动加上句点前缀的名称即使在后续查询中也可以正常工作

如果在不允许设计视图再次破坏SQL的情况下编辑和保存SQL,则通常可以通过从SELECT子句中删除源引用(如SELECT Details.Description->SELECT Description)从结果中删除前缀。显式别名的工作方式也类似于选择Details.Description作为Description,但这确实超出了我的问题范围,因为我想知道Access为什么会自动随机添加源前缀

这是我最近的一个查询,显示了这种恼人的默认行为。我看不到任何保留名称或查询的其他功能会导致此。。。正如我已经提到的,我可以删除所有细节。引用,它对简单的列名非常有效:

SELECT Detail.[Board Order], Detail.[Sales Rep], Detail.[Sales Team], Detail.[Sales Year],
  Detail.[Team Name], Detail.[Date of Service], Detail.[Service Year],
  Detail.[Service Month], Detail.[Service Week], Detail.[Service Codes],
  Detail.Account, Detail.[Last Name], Detail.[First Name],
  Detail.AsOfDate
FROM [Rep Completed IS Detail As Of] AS Detail
WHERE (((Detail.[Service Year])=Year([Detail].[AsOfDate])) 
  AND ((Detail.[Service Week])=DatePart("ww",[Detail].[AsOfDate])))
在这些列中显示结果

| ID | ItemName | Description |
| Products.ID | ItemName | Details.ID | Description |
| Detail.Board Order | Detail.Sales Rep | Detail.Sales Team | ...

我想不出这种行为的模式。有人知道什么时候/为什么会发生这种情况吗?

是关于前缀或由[]括起的字段的问题吗?是关于前缀的问题。我认为将字段拖放到“设计”视图是正常的行为,我觉得这很有帮助。如果您对它不满意,则编写自己的查询,但是如果您使用相同的列名连接多个表,请确保正确地为其别名。SQL中也存在这种行为Server@maSTAShuFu谢谢,我很抱歉我的问题太长了。。。但我担心,如果我没有包括细节和例子,就会产生误解。如果您重新阅读第二段,您将看到我在Access中提到的常见行为—列名称通常不以源表或查询名称作为前缀,除非存在明显的名称冲突。我很少观察到我解释的所有列都加前缀的行为。我还提到我知道我可以给每一列加别名,但这不是我要问的。就最后一个结果而言,如果它是虚线的,请尝试使用单词列名,即Board_Order是关于前缀或由[]括起的字段的问题?与前缀有关。我认为将字段拖放到“设计”视图是一种正常行为,我觉得这很有帮助。如果您对它不满意,则编写自己的查询,但是如果您使用相同的列名连接多个表,请确保正确地为其别名。SQL中也存在这种行为Server@maSTAShuFu谢谢,我很抱歉我的问题太长了。。。但我担心,如果我没有包括细节和例子,就会产生误解。如果您重新阅读第二段,您将看到我在Access中提到的常见行为—列名称通常不以源表或查询名称作为前缀,除非存在明显的名称冲突。我很少观察到我解释的所有列都加前缀的行为。我还提到我知道我可以给每一列都加上别名,但这不是我要问的。就最后一个结果而言,如果它是虚线的,请尝试使用单字列名,即Board_Order