2017-04-14 5 views
-1

私はこのようなサブクエリから複数の条件を持つテーブルからデータを変更しようとしています:UPDATEクエリが

UPDATE field0 as f0 
SET f0.c=IIF(Table.Field="x","a",IFF(Table.Field="y","b","c")) 
FROM (
    SELECT f2.b AS Field 
    FROM (field1 as f1 INNER JOIN field2 as f2 ON f1.a=f2.a) 
    INNER JOIN field0 as f00 f00.a=f1.a 
) as Table 
; 

をしかし、それは働いていない、それは私がどのように問題を持っていると言います私はその質問を書いた。

は、私はまた、次のように試してみました:

UPDATE field0 as f0 
SET f0.c=IIF(f0.a=ANY(
SELECT f1.c 
FROM field1 as f1 INNER JOIN field2 as f2 ON f1.a=f2.a 
WHERE f2.b=4),"a",IIF(f0.a=ANY(
    SELECT f1.c 
    FROM field1 as f1 INNER JOIN field2 as f2 ON f1.a=f2.a 
    WHERE f2.b NOT NULL),"b","c")) 
; 

しかし、この1は、クエリが更新可能なクエリではありませんと言う:私は何をすべきかを知らない/

、任意のヘルプ?

これは私が怒っ実際のコードです: UPDATE Flights AS F SET F.status = (SELECT IIF(DE.handeling_code=4,"canceled",IIF(DE.handeling_code IS NOT NULL,"on time ","late")) FROM Irregular_Events AS IE INNER JOIN Delay_Event AS DE ON IE.IE_code=DE.delay_code WHERE IE.flight_code=F.flight_code ORDER BY F.flight_code); 私はこれを実行しようとしましたが、私は、クエリを使用する場合、それは言う:「アクションが更新可能なクエリを使用しなければならない」

も、これが私のデータであり、便(簡略化された方法で)表: flight_code|flight_status -----------|------------- 1 | On time 2 | On time 3 | On time 4 | On time irregular_eventテーブルがそのようである: IE_code|flight_code -------|----------- 1 | 2 2 | 4 delay_eventテーブルがそのようである: delay_code|delay_reason ----------|------------ 1 | 1 2 | 4 1から3までの遅延理由だけ遅延と4であるのでキャンセルフライト あります私は2番目の飛行を変更する必要がありますアタスが遅れて飛行4をキャンセルしました。

申し訳ありませんが、私の最初のここで私は本当にこの問題について助けが必要でした。

+0

どのデータベースをMySQL、またはMS Accessで使用しようとしていますか? – SandPiper

+0

サンプルデータを提供する。フィールド、テーブル、クエリに意味のある名前を付けます。 – June7

+0

私はフライトスケジュールや飛行遅れなどの便で起こりうる例外的な出来事について、学校のプロジェクトを作っています。 私がしようとしている質問は、その例外的な出来事からデータに基づいたすべてのフライトの状況を変更することです発生したかしなかったか。このクエリの 私は飛行機が離陸前に遅れていたかどうかを確認した後、または飛行機が離陸する前にデータが失われたかどうかを確認した後、フライトテーブルのデータを更新します。 これをチェックするには、delay_eventテーブルとの1対1の関係を持つirregular_eventsテーブルを使用します。 –

答えて

0

2番目のIifでエラーが発生しました.IFFがあり、ネストされたIifの終了括弧がありません。 UPDATE Flights AS F, Irregular_Events AS IE, Delay_Event AS DE SET F.status = IIF(DE.handeling_code=4,"Canseled","Delayed") WHERE F.flight_code=IE.flight_code AND IE.IE_code=DE.delay_code; とそれだけで正常に動作します:

UPDATE field0 as f0 
SET f0.c=Iif(Table.Field="x","a",Iif(Table.Field="y","b","c")) 
WHERE b IN (
    SELECT f2.b AS Field 
    FROM (field1 as f1 INNER JOIN field2 as f2 ON f1.a=f2.a) 
    INNER JOIN field0 as f00 f00.a=f1.a) 
0

私は何とか解決策を持って、これをした気にしない:INはWHERE

たぶんあなたが使用する必要があります!