【问题标题】:Delete with Inner Join - Syntax Error [duplicate]使用内部连接删除 - 语法错误 [重复]
【发布时间】:2016-03-19 08:20:13
【问题描述】:

下面是我的代码:

try{
    String userid = SystemPlatformFactory.getPlatform().getSystem().getUserID();
    String[] args = new String[]{userid};
    SQLiteDatabase db = this.getWritableDatabase();
    db.execSQL("DELETE sa FROM stubout_account sa INNER JOIN stubout s ON sa.parentid = s.objid INNER JOIN area r ON s.areaid = r.objid WHERE r.assigneeid = ?",args);
    db.close();
}catch(Exception e){
    e.printStackTrace();
    ERROR = "Database Error: " + e.toString();
}

执行上面的代码会产生这个错误:

W/System.err(31732): android.database.sqlite.SQLiteException: near "sa": syntax error (code 1): , while compiling: DELETE sa FROM stubout_account sa INNER JOIN stubout s ON sa.parentid = s.objid INNER JOIN area r ON s.areaid = r.objid WHERE r.assigneeid = ?
W/System.err(31732):    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
W/System.err(31732):    at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1093)
W/System.err(31732):    at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:670)
W/System.err(31732):    at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
W/System.err(31732):    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
W/System.err(31732):    at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
W/System.err(31732):    at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1798)
W/System.err(31732):    at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1779)
W/System.err(31732):    at com.rameses.waterworks.database.AndroidDatabase.clearStuboutAccount(AndroidDatabase.java:889)
W/System.err(31732):    at com.rameses.waterworks.page.Download.clearReadingGroups(Download.java:372)
W/System.err(31732):    at com.rameses.waterworks.page.Download.access$000(Download.java:48)
W/System.err(31732):    at com.rameses.waterworks.page.Download$2.handle(Download.java:146)
W/System.err(31732):    at com.rameses.waterworks.page.Download$2.handle(Download.java:97)

错误的原因是什么?如何解决这个问题?

【问题讨论】:

  • 试试这个DELETE FROM stubout_account where(select * from stubout_account sa INNER JOIN stubout s ON (sa.parentid = s.objid) INNER JOIN area r ON (s.areaid = r.objid) WHERE r.assigneeid = ?)
  • @MrNeo 这不是有效的 SQL。

标签: java android sqlite


【解决方案1】:
db.execSQL("DELETE sa.* FROM stubout_account sa INNER JOIN stubout s ON sa.parentid = s.objid INNER JOIN area r ON s.areaid = r.objid WHERE r.assigneeid = ?",args);

【讨论】:

    猜你喜欢
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 2012-07-30
    • 2018-09-01
    • 2015-06-11
    相关资源
    最近更新 更多