Sql 为包含连接访问的子查询提供别名
我对SQL server的T-SQL有更多的经验,但我一直在Access中工作。我的问题是如何为具有自己的联接操作的子查询提供别名。我想我说的是嵌套联接操作。我知道我可以创建一个seprate查询,但我不需要它,我希望尽可能保持对象列表的干净。我当前的代码如下,我只显示from语句,因为这是错误的来源:Sql 为包含连接访问的子查询提供别名,sql,ms-access,join,alias,Sql,Ms Access,Join,Alias,我对SQL server的T-SQL有更多的经验,但我一直在Access中工作。我的问题是如何为具有自己的联接操作的子查询提供别名。我想我说的是嵌套联接操作。我知道我可以创建一个seprate查询,但我不需要它,我希望尽可能保持对象列表的干净。我当前的代码如下,我只显示from语句,因为这是错误的来源: FROM ( ( tblPropertySpecs INNER JOIN ( tblAssignedBuildingTypes INN
FROM
(
(
tblPropertySpecs
INNER JOIN
(
tblAssignedBuildingTypes
INNER JOIN qryAllPropertyIDs
ON tblAssignedBuildingTypes.PropertySpecID = qryAllPropertyIDs.PropertySpecID
)
ON (tblPropertySpecs.PropertySpecID = tblAssignedBuildingTypes.PropertySpecID)
AND (tblPropertySpecs.PropertySpecID = qryAllPropertyIDs.PropertySpecID)
)
INNER JOIN
(
tblRefConstructionTypes
INNER JOIN tblAssignedConstructionTypes
ON tblRefConstructionTypes.ConstructionTypeID = tblAssignedConstructionTypes.ConstructionTypeID
)
ON tblAssignedBuildingTypes.AssignedBuildingTypeID = tblAssignedConstructionTypes.AssignedBuildingTypeID
)
LEFT JOIN
(
tblRefFireSafetyDetectMethods
INNER JOIN tblAssignedFireSafetyDetections
ON tblRefFireSafetyDetectMethods.FireSafetyDetectedID = tblAssignedFireSafetyDetections.FireSafetyDetectedID
) [q1]
ON tblAssignedBuildingTypes.AssignedBuildingTypeID = q1.AssignedBuildingTypeID
WHERE (((qryAllPropertyIDs.Status)="Active"));
我应该在处理此问题之前阅读评论,因为您不再关心: 这似乎是可行的,尽管我不愿意创建您的表结构,然后输入假数据来测试它。Access愿意尝试在设计视图中显示这一点,从而确认它相信SQL是可行的
Select * FROM
( select * from
( select * from
tblPropertySpecs
INNER JOIN
( select * from
tblAssignedBuildingTypes
INNER JOIN qryAllPropertyIDs
ON tblAssignedBuildingTypes.PropertySpecID = qryAllPropertyIDs.PropertySpecID
) as a
ON (tblPropertySpecs.PropertySpecID = a.PropertySpecID)
AND (tblPropertySpecs.PropertySpecID = a.PropertySpecID)
)
INNER JOIN
( select * from
tblRefConstructionTypes
INNER JOIN tblAssignedConstructionTypes
ON tblRefConstructionTypes.ConstructionTypeID = tblAssignedConstructionTypes.ConstructionTypeID
) as b
ON a.AssignedBuildingTypeID = b.AssignedBuildingTypeID
) as c
LEFT JOIN
( select * from
tblRefFireSafetyDetectMethods
INNER JOIN tblAssignedFireSafetyDetections
ON tblRefFireSafetyDetectMethods.FireSafetyDetectedID = tblAssignedFireSafetyDetections.FireSafetyDetectedID
) as q1
ON c.AssignedBuildingTypeID = q1.AssignedBuildingTypeID
WHERE (((a.Status)="Active"));
一般来说,复杂的访问查询有一些奇怪之处
- 如果不进行比较,则很难比较子查询中的值 别名。如何引用该值?它是子查询中特定字段的值
- 如果挑剔,请访问。有时,您需要添加额外的Select*from语句,以使其令人满意
也就是说,如果您要做任何远程复杂的事情,那么创建子查询并将其保存到数据库中要容易得多。虽然没那么漂亮,但肯定更简单。此外,有时获取查询的查询过于复杂,错误将通过将其部分保存为查询而不是使用子查询来工作。在处理此问题之前,我应该阅读注释,因为您不再关心: 这似乎是可行的,尽管我不愿意创建您的表结构,然后输入假数据来测试它。Access愿意尝试在设计视图中显示这一点,从而确认它相信SQL是可行的
Select * FROM
( select * from
( select * from
tblPropertySpecs
INNER JOIN
( select * from
tblAssignedBuildingTypes
INNER JOIN qryAllPropertyIDs
ON tblAssignedBuildingTypes.PropertySpecID = qryAllPropertyIDs.PropertySpecID
) as a
ON (tblPropertySpecs.PropertySpecID = a.PropertySpecID)
AND (tblPropertySpecs.PropertySpecID = a.PropertySpecID)
)
INNER JOIN
( select * from
tblRefConstructionTypes
INNER JOIN tblAssignedConstructionTypes
ON tblRefConstructionTypes.ConstructionTypeID = tblAssignedConstructionTypes.ConstructionTypeID
) as b
ON a.AssignedBuildingTypeID = b.AssignedBuildingTypeID
) as c
LEFT JOIN
( select * from
tblRefFireSafetyDetectMethods
INNER JOIN tblAssignedFireSafetyDetections
ON tblRefFireSafetyDetectMethods.FireSafetyDetectedID = tblAssignedFireSafetyDetections.FireSafetyDetectedID
) as q1
ON c.AssignedBuildingTypeID = q1.AssignedBuildingTypeID
WHERE (((a.Status)="Active"));
一般来说,复杂的访问查询有一些奇怪之处
- 如果不进行比较,则很难比较子查询中的值 别名。如何引用该值?它是子查询中特定字段的值
- 如果挑剔,请访问。有时,您需要添加额外的Select*from语句,以使其令人满意
USys
,您可以完成大致相同的事情,不同的是,除非您将访问选项设置为显示系统对象,否则它不会与其他保存的查询一起显示。“我知道我可以创建一个seprate查询,但我不需要它,我希望保持对象列表尽可能干净。”
您可以在保存的查询上设置隐藏属性,使其不显示在数据库窗口(Access版本<2007)或导航窗格(Access>=2007)中。这将防止它扰乱查询列表,除非您已将Access选项设置为显示隐藏对象
通过在查询名称前面加上
USys
,您可以完成大致相同的事情,不同的是,除非您将访问选项设置为显示系统对象,否则它不会与其他保存的查询一起显示。有什么问题吗?您似乎有一个别名[q1]。您可以将称为q1
,或者干脆称为(此处查询)a
谢谢Remou,但我仍然有同样的问题。其他人还有其他选择吗?我不确定,我倾向于将所有表的内部联接tblAssignedConstructionTypes别名为a
,并确保您不使用与外部别名相同的内部别名,Access就像这样奇怪。谢谢,我将其记为Access起诉并创建一个单独的查询,不值得花时间。我很感激你的帮助。如果你创建一个与你的评论内容相同的答案,我会给你评分。我敢打赌它在FROM子句中说语法错误,并指出[q1]有什么问题?你似乎有一个别名[q1]。你可以说为q1
或干脆说(此处查询)a
谢谢Remou,但我仍然有同样的问题。其他人还有其他选择吗?我不确定,我倾向于将所有表的内部联接tblAssignedConstructionTypes别名为a
,并确保您不使用与外部别名相同的内部别名,Access就像这样奇怪。谢谢,我将其记为Access起诉并创建一个单独的查询,不值得花时间。我感谢您的帮助。如果您创建一个与您的评论内容相同的答案,我将给予您信任。我打赌它在FROM子句中显示语法错误,并指向[q1]