1

このクエリ

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"))

要求されたパラメーターとして「パラメーター値を入力してください」という結果になりますが、最初の行からQuery1.PeriodDate「」を削除するだけではAS [OpenFromDate]、クエリは完全に実行されます。[Periods_2013-2014]テーブルを P1 としてエイリアスした場合も同じです。PeriodDateフィールドを 2 回取得するためにクエリをスタックする必要があることを除けば、これは問題にはなりません。私は何を間違っていますか?


更新: このクエリ

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];

プロパティ シートから Order By 句を削除したので、完全に動作します。

4

1 に答える 1

2

Access では、クエリでフィールド エイリアスを使用できません。Whereだから、問題はあなたの条項にあると思います。

name: 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"))

テーブルの 1 つにエイリアス名を使用し、他のテーブルには使用しなかった理由を知りたいと思いました。列名にエイリアスを使用しても問題ありません。ただし、これらのエイリアス名は Where 句では使用しないでください。

さらに、詳細については以下のリンクを参照してください。

于 2013-07-28T12:10:55.897 に答える