2017-05-22 14 views
0

SQLiteのSQLは、MySqlと同じ方法で完全に実装されているわけではありません。SQLite/MySQLの互換性の問題

SQL Error (1093): Table 'sorties' is specified twice, both as a target for 'UPDATE' and as a separate source for data

MySQLのクエリ:次のクエリでの私の問題は、彼らは互換性がないと私は、MySQLを条件if <DBMS> ... else

SQLiteのクエリ

UPDATE sorties SET state = '#' 
WHERE `key` IN (
    SELECT `key` FROM sorties 
    INNER JOIN reports AS r 
    ON r.sortieId=sorties.`key`); 

は、エラーを回避したいということであり、hereから適合)

SQLiteの上

エラー:

SQLiteManager: Likely SQL syntax error: UPDATE sorties AS s SET s.state='#' WHERE s. key IN (SELECT t.sortieId FROM ( SELECT DISTINCT r.sortieId AS sortieId FROM reports AS r INNER JOIN sorties AS sort ON sort. key =r.sortieId) AS t); [ near "AS": syntax error ] Exception Name: NS_ERROR_FAILURE Exception Message: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [mozIStorageConnection.createStatement]

私はこのクエリは均等に両方のシステム上で動作するようにする方法を見つけ出すことはできません!

私が持っているしたいすべてはそれがkeyreports.sortieIdで見つけることができますときsortiesの各stateは「#」でなければならないこと、です。

多分これには別の方法がありますか?

は、最初のコマンドは、サブクエリでsortiesテーブルからkey値を読み込み、それらのキー値は、外文でsortiesテーブルに存在するかどうかをチェックし、あなたに

答えて

0

ありがとうございます。そのチェックは余計です。あなただけの直接reportsにものに値を比較することができます2番目のコマンドについては

UPDATE sorties 
SET state = '#' 
WHERE key IN (SELECT sortieId 
       FROM reports); 

を、SQLiteはINSERTで使用されるテーブルをエイリアシングサポートしていません/ UPDATE/DELETEこれらのコマンドは、単一のテーブルの上にのみ動作するので。 AS sを削除してssortiesに置き換えてください。

+0

大変ありがとうございます。時には表示されるよりずっと簡単です。 –