2

ここに画像の説明を入力奇妙なことに、このEXISTS句はDBISAMの SQL エンジンではサポートされていないようです。常に SQL エラーが発生するためです。以下は、EXISTS が使用されているサンプルです。ここで何か不足していますか?

update Table1 set HASXACTION = False
WHERE EXISTS (SELECT SERIALID
              From Table2  
              LEFT JOIN Table1 ON (Table2 .AUXILACT = Table1 .CODE) 
                               AND (Table2 .CHARTACT = Table1 .CHARTACT) )
4

3 に答える 3

2

joinサブクエリで を本当に必要としないと思います。おそらく、相関サブクエリを意図しています。

UPDATE Table1
    SET HASXACTION = False
    WHERE EXISTS (SELECT SERIALID
                  FROM Table2  
                  WHERE Table2.AUXILACT = Table1.CODE AND Table2.CHARTACT = Table1.CHARTACT
                 );

これにより、発生している問題も修正されます。これは、句とサブクエリTable1の両方での参照です。update(これは MySQL の制限です。)

編集:

dbisamの参照EXISTS(またはサブクエリ) が見つかりません。ただし、結合を使用して更新を行うことができるため、これは同等である必要があります。

UPDATE Table1
    SET HASXACTION = False
    FROM Table1 JOIN
         Table2
         ON Table2.AUXILACT = Table1.CODE AND Table2.CHARTACT = Table1.CHARTACT;
于 2014-11-26T12:41:45.773 に答える
1

すでにわかっているように、IN を使用して実行できます。ただし、IN は 1 つのフィールドしか操作できないという制限があります。そのため、2 つのフィールドを連結して条件に合う式を作成することで、この問題を回避できます。1つはインナー用、もう1つはアウター用です。

update Table1 set HASXACTION = False
WHERE Code+'.'+CHARTACT IN 
 (  
   SELECT  AUXILACT+'.'+CHARTACT From Table2
 )
于 2014-11-26T13:59:53.857 に答える