0

データベースのテーブルを更新しようとすると、このエラーが発生します。

すべての派生テーブルには独自のエイリアスが必要です

更新しようとしているmysqlクエリは次のとおりです。

 UPDATE (SELECT clientinfo.idNumber, clientinfo.theCompName, clientoffers.idNumber, 
 clientoffers.expTimeWaiting, clientoffers.theDateStart,
 clientoffers.theDateEnd, clientoffers.theOffer, clientoffers.isActive, 
 clientoffers.theType, clientoffers.fixedAmount, clientoffers.fixedUsed
 FROM clientinfo, clientoffers
 WHERE clientoffers.idNumber = clientinfo.idNumber
 AND clientoffers.theDateEnd >= '2010-06-03'
 AND clientoffers.theDateStart <= '2010-06-03'
 AND clientoffers.idNumber = 'NB351560'
 AND clientoffers.isActive = 'YES')
 SET clientoffers.fixedUsed = clientoffers.fixedUsed + 1

それは問題ないように見えますが、何らかの理由で機能していないようですか?

どんな助けでも素晴らしいでしょう!:o)

アップデート

 sqltemp = "UPDATE clientinfo, clientoffers SET clientoffers.fixedUsed = clientoffers.fixedUsed + 1 WHERE clientoffers.idNumber = clientinfo.idNumber" & _
             "AND clientoffers.theDateEnd >= '2010-06-03'" & _
             "AND clientoffers.theDateStart <= '2010-06-03'" & _
             "AND clientoffers.idNumber = 'NB351560'" & _
             "AND clientoffers.isActive = 'YES'"
        oRecordset.Open sqltemp, oConnection,3,3

ODBC ドライバーが要求されたプロパティをサポートしていないというエラーが表示 されます。

クラシック ASP で Mysql 5.1 を使用しています。

デビッド

4

2 に答える 2

1

なぜそこに選択があるのですか?それも必要ですか?

なぜだめですか:

 UPDATE clientinfo, clientoffers

 SET clientoffers.fixedUsed = clientoffers.fixedUsed + 1

 WHERE clientoffers.idNumber = clientinfo.idNumber
 AND clientoffers.theDateEnd >= '2010-06-03'
 AND clientoffers.theDateStart <= '2010-06-03'
 AND clientoffers.idNumber = 'NB351560'
 AND clientoffers.isActive = 'YES'

さらに、2 つのテーブルに外部キー制約がある場合(または、すべてのエントリに常に対応するエントリがあるidNumberと想定できます):clientofferclientinfo

 UPDATE clientoffers

 SET clientoffers.fixedUsed = clientoffers.fixedUsed + 1

 WHERE clientoffers.theDateEnd >= '2010-06-03'
 AND clientoffers.theDateStart <= '2010-06-03'
 AND clientoffers.idNumber = 'NB351560'
 AND clientoffers.isActive = 'YES'
于 2010-06-04T04:03:05.397 に答える
0

「クライアントオファー」。括弧の外では有効ではないため、select ステートメントのエイリアスを作成する必要があります (UPDATE (SELECT...) を試してください foo SET foo.fixedUsed = foo.fixedUsed + 1

ただし、一度に 1 つのテーブルで更新を行う方が簡単です。

UPDATE clientoffers
SET fixedUsed = fixedUsed + 1
WHERE
EXISTS (SELECT * FROM clientinfo WHERE
clientoffers.idNumber = clientinfo.idNumber)
AND clientoffers.theDatEnd >= '2010-06-03'
AND clientoffers.theDateStart <= '2010-06-03'
AND clientoffers.idNumber = 'NB351560'
AND clientoffers.isActive = 'YES

ただし、MySQL のバージョンによっては、EXISTS サブクエリ構文がサポートされていない場合があります。このような場合は、次のことができます。

a.) MySQL をアップグレードするか、別の DB エンジンに切り替える b.) コードを使用して select をループで実行し、返された行ごとに単一の update ステートメントを発行し、両方のテーブルをロックすることを忘れないでください。

于 2010-06-04T03:05:46.297 に答える