Sql 为什么仅在使用“选择为”时才获得“输入参数值”

Sql 为什么仅在使用“选择为”时才获得“输入参数值”,sql,ms-access,Sql,Ms Access,这个问题 SELECT P2.ID, P2.Storenum, [Periods_2013-2014].[PeriodDate] AS [OpenFromDate], P2.[Open From Day], P2.[Open From Time], P2.[Open To Day], P2.[Open To Time] FROM [Periods_2013-2014] INNER JOIN [tblOpenCloseTimes] AS P2 ON [Periods_2013-2014

这个问题

SELECT P2.ID, P2.Storenum, [Periods_2013-2014].[PeriodDate] AS [OpenFromDate],
  P2.[Open From Day], P2.[Open From Time], P2.[Open To Day], 
  P2.[Open To Time]
FROM [Periods_2013-2014] 
INNER JOIN [tblOpenCloseTimes] AS P2 ON [Periods_2013-2014].[Day]=P2.[Open From Day]
WHERE ((([Periods_2013-2014].Day)=P2.[Open From Day] 
  AND P2.Storenum ="43010605" 
  AND [Periods_2013-2014].Period = "4"))
SELECT T2.Storenum, T2.[PeriodDate] AS [Open From Date], T2.[Open From Day], 
T2.[Open From Time], T1.[PeriodDate] AS [Open To Date], T2.[Open To Day], 
T2.[Open To Time]
FROM [Periods_2013-2014] AS T1, 
(SELECT P2.Storenum, P1.[PeriodDate],  P2.[Open From Day], P2.[Open From Time], 
P2.[Open To Day], P2.[Open To Time]
FROM [Periods_2013-2014] AS P1 INNER JOIN tblOpenCloseTimes AS P2 
ON P1.[Day]=P2.[Open From Day]
WHERE (((P1.Day)=P2.[Open From Day] 
   AND P2.Storenum ="43010605" 
   AND P1.Period = "4"))
ORDER BY P1.[PeriodDate]) AS T2
WHERE T1.[Day]=T2.[Open To Day]
AND T1.[PeriodDate]>=T2.[PeriodDate] 
AND T1.[PeriodDate] - T2.[PeriodDate] <7
ORDER BY P1.[PeriodDate];
结果是输入一个参数值,Query1.PeriodDate作为请求的参数,而如果我只从第一行删除as[OpenFromDate],查询将运行得很好。如果我将[Periods_2013-2014]表别名为P1,情况也一样。这不会是一个问题,除非我需要堆叠查询以获得两次PeriodDate字段。我做错了什么

更新:此查询

SELECT P2.ID, P2.Storenum, [Periods_2013-2014].[PeriodDate] AS [OpenFromDate],
  P2.[Open From Day], P2.[Open From Time], P2.[Open To Day], 
  P2.[Open To Time]
FROM [Periods_2013-2014] 
INNER JOIN [tblOpenCloseTimes] AS P2 ON [Periods_2013-2014].[Day]=P2.[Open From Day]
WHERE ((([Periods_2013-2014].Day)=P2.[Open From Day] 
  AND P2.Storenum ="43010605" 
  AND [Periods_2013-2014].Period = "4"))
SELECT T2.Storenum, T2.[PeriodDate] AS [Open From Date], T2.[Open From Day], 
T2.[Open From Time], T1.[PeriodDate] AS [Open To Date], T2.[Open To Day], 
T2.[Open To Time]
FROM [Periods_2013-2014] AS T1, 
(SELECT P2.Storenum, P1.[PeriodDate],  P2.[Open From Day], P2.[Open From Time], 
P2.[Open To Day], P2.[Open To Time]
FROM [Periods_2013-2014] AS P1 INNER JOIN tblOpenCloseTimes AS P2 
ON P1.[Day]=P2.[Open From Day]
WHERE (((P1.Day)=P2.[Open From Day] 
   AND P2.Storenum ="43010605" 
   AND P1.Period = "4"))
ORDER BY P1.[PeriodDate]) AS T2
WHERE T1.[Day]=T2.[Open To Day]
AND T1.[PeriodDate]>=T2.[PeriodDate] 
AND T1.[PeriodDate] - T2.[PeriodDate] <7
ORDER BY P1.[PeriodDate];

现在我已经从属性表中删除了ORDERBY子句,效果非常好

Access不允许您在查询中使用字段别名。所以,我想问题在于你的Where条款

请尝试删除名称:P2并使用完整的表名,以便语句看起来像:

SELECT [tblOpenCloseTimes].ID, [tblOpenCloseTimes].Storenum, [Periods_2013-2014].[PeriodDate] AS [OpenFromDate],
  [tblOpenCloseTimes].[Open From Day], [tblOpenCloseTimes].[Open From Time], [tblOpenCloseTimes].[Open To Day], 
  [tblOpenCloseTimes].[Open To Time]
FROM [Periods_2013-2014] 
INNER JOIN [tblOpenCloseTimes] ON [Periods_2013-2014].[Day]=[tblOpenCloseTimes].[Open From Day]
WHERE ((([Periods_2013-2014].Day)=[tblOpenCloseTimes].[Open From Day] 
  AND [tblOpenCloseTimes].Storenum ="43010605" 
  AND [Periods_2013-2014].Period = "4"))
我想知道为什么其中一个表使用别名,而另一个表不使用别名。为列名称使用别名是可以的。但是,Where子句中不应使用这些别名

此外,您可以参考以下链接了解更多详细信息:


这是MS access查询吗?只是想一想,MS access有时会在SQL编辑器中抛出这种奇怪的错误,即使您对SQL进行了更改,它仍会看到旧语法,并会抛出一条与您看到的错误消息类似的错误消息。尝试创建一个新查询并将语法粘贴到该查询中。如果我无意中拼错了正在查询的表上的字段名,或者该字段完全不存在,我也会经常遇到此错误消息。@TomFoale-请阅读下面关于在属性表中清除order by参数的注释。这可能是我上面描述的奇怪错误的原因,现在我知道如何在将来修复它。谢谢。我用方括号中的完整表名替换了所有别名。相同的条件下也会发生相同的错误-仅当我对您的列使用AS子句时。请在整个查询中尝试一个不使用任何别名的查询,然后尝试仅对列使用别名。我保存并关闭了查询,然后重新打开它,现在它总是要求参数值。我复制并粘贴了您的查询,该查询始终要求参数值。使用文档管理器会给出:OrderBy:[Query1]。[PeriodDate]OrderByOn:False。Periods_2013-2014表格的表格结构为ID-自动编号、Period-Text、Week-Text、Week No-Text、Day-Text、PeriodDate-Date/Time。我在查询的属性表中通过查询1:PeriodDate找到了订单。我删除了它,现在查询运行得很好,不管有没有AS子句。谢谢你的帮助,这让我有一阵子感到难堪。