2017-05-03 11 views
2

私は学校向けに少しプロジェクトを行っていますが、SQLです。私はデータベースエンジンとしてMS Accessを使用しています。selectとwhere句でクエリを更新します。

私は、プロジェクトフェーズの実際の終了日を、そのフェーズでの割り当ての最後の実際の終了日までに計算して更新しようとしています。 このクエリは、「meet.PhaseId」の値を入力するよう求めるプロンプトを返します。

UPDATE ProjectPhases 
SET RealEndDate = (SELECT MAX(asgn.RealEndDate) AS RealEndDate 
        FROM Assignments AS asgn 
        INNER JOIN 
        (
        Meetings AS meet 
        INNER JOIN ProjectPhases 
        ON meet.PhaseId = ProjectPhases.PhaseId 
        ) 
        ON asgn.MeetingId = meet.MeetingId 
        WHERE meet.PhaseId = ProjectPhases.PhaseId 
        vAND asgn.RealEndDate IS NOT NULL) 
WHERE meet.PhaseId = ProjectPhases.PhaseId; 

Database structure (image)

+1

「機能していません」とは貴重な回答を得るのに役立つ説明ではありません。あなたの問題の説明をより正確にしてください。 – Plirkee

+0

@Plirkee Tnx、私はここで新しいです。私の質問を編集しました。 –

答えて

2

集計クエリを別のクエリに保存し、更新クエリでドメイン集計DLookUp()を使用することを検討してください。 MS Access SQLでは、更新クエリは更新可能な条件(または非read-only)を維持して、集約クエリの使用を排除する必要があります。

SELECTクエリ

(無ProjectPhasesが参加していない)

UPDATE ProjectPhases p 
SET p.RealEndDate = DLookUp("MaxRealEndDate", "myaggQuery", "PhaseId=" & p.PhaseId) 

また

SELECT meet.PhaseId, MAX(asgn.RealEndDate) AS MaxRealEndDate 
FROM Assignments AS asgn 
INNER JOIN Meetings AS meet 
ON asgn.MeetingId = meet.MeetingId 
WHERE asgn.RealEndDate IS NOT NULL 
GROUP BY meet.PhaseId 

UPDATEクエリは、保存された集計を避けるために、ネストされたドメインの集約を検討するかもしれませんクエリ:

UPDATE ProjectPhases p 
SET p.RealEndDate = DMax("RealEndDate", "Assignments", "MeetingId=" & 
         DLookUp("MeetingId", "Meetings", "PhaseId=" & p.PhaseId) & 
         " AND RealEndDate IS NOT NULL") 
+0

したがって、MS Accessを使用する場合、純粋なSQLでこのことを行うことはできませんか? –

+0

前述のとおり、集計クエリを含む更新不可能なクエリは、MS Access SQLダイアレクトの更新クエリで使用することはできません。今度は、集約したクエリ結果のテーブルを作成し、 'UPDATE tbl INNER JOIN othertbls ... SET 'を使うことができます。この結合は更新可能で、' GROUP BY'は含まれていません。 – Parfait

0

あなたは、このように何PhaseIdをフィルタ処理するために存在していない、あなたのサブクエリからmeet.PhaseIdを選択しないでください。

GUIデザイナーを使用して段階的にクエリを作成する方が簡単です。

+0

PhaseIdをサブクエリに追加すると、「メインクエリのFROM句でEXISTS予約語を使用せずに複数のフィールドを返すサブクエリを作成しました。エラー3306) " 私はguiを使用することはできません、ここでpintはSQLを習得することです –

+0

あなたのエラーと質問は非常に基本的なので、GUIデザイナーを使用してSQLを勉強してください。そして/またはSQLのガイドを参照してください。 – Gustav

関連する問題