2016-11-22 2 views
2

SQLの実行順序について質問があります。 MS-Accessでネストされたiif()条件文を使用しています。文字長が長すぎるため、この文でエイリアスを使用したかったのです。クエリのテーブル配置を逆にするMS Access更新クエリ。それはなぜ機能するのですか?

私はこれを(事故によって)試してみましたが、それはうまくいきません。実際に使用する必要があるのか​​どうかはわかりません。以下に、元の形式の短縮形の例を2番目の形式と比較して示します。一般的な表名を使用してその要点を取得するのに十分なステートメントがあります。

upDateMeテーブルを更新します。

オリジナル事前別名:

UPDATE upDateMe 
INNER JOIN linkMe 
    ON (linkMe.UniqueID = upDateMe.UniqueID) 
AND (linkMe.SrcNumber = upDateMe.SrcNumber) 
SET upDateMe.ExpiryDate = [linkMe].[ExpiryDate] 
    , upDateMe.PermitEnd = [linkMe].[PermitEnd]... 

は、ここで私は、テーブルを逆にし、別名 'BDATA' 内に置かれている:!この2番目のクエリは動作します

UPDATE linkMe 
INNER JOIN upDateMe AS bData 
ON (linkMe.UniqueID = bData.UniqueID) 
AND (linkMe.SrcNumber = bData.SrcNumber) 
SET bData.ExpiryDate = [linkMe].[ExpiryDate] 
    , bData.PermitEnd = [linkMe].[PermitEnd]... 

??。なぜそれがどうなるかは分かりません。誰かがそれを説明できますか?

+0

もう一度エイリアスを使用するのはなぜですか? – kbball

+0

@kbballIn MS-Accessでは、長いテーブル名を持つ例文を使っています(問題は入力しません)。 iif()条件の長いセット(私の質問には表示されません)のためです。クエリが条件付きを受け入れることができるように、テーブル名を短くしました。 –

答えて

2

setステートメントの左側は常に更新されるものです。

コードでは(ほとんどの場合ではないかもしれませんが)、右側にある値に=を設定して変数を設定します。左側は常に目標です。

この場合、linkMeとupDateMe(bDataとして)の結合を更新し、bData値をlinkme値に設定するようデータベースに指示します。 bDataとlinkMeの両方を同時に更新しようとすると、一度に1つのテーブルしか更新できないため、エラーが発生する可能性があります。

+0

少し追加:この文を 'UPDATE upDateMe(INNER JOIN linkMe)'と考えるのではなく、 'UPDATE(upDateMe INNER JOIN linkMe)'と考えてください。したがって、JOIN内のテーブルの順序は関係ありません。別名も関係ありません。 @ r.arends – Andre

+0

基本的にはインラインビューを更新しています。 – xQbert

+0

@Andreありがとうございました。 –

関連する問題