2017-12-30 24 views
-1

Ich bin noch neu auf diesem und es ist mein erstes Mal mit dieser Abfrage mehrerer Tabellen. Warum habe ich einen solchen Fehler? Hier ist mein Code:Warum habe ich einen Syntaxfehler in meiner Anfrage in der Nähe von "WHERE"? (Mehrere Tabellen)

String selectQuery = 
      " select *" + 
      " from tableassign left outer join\n" + 
      "   tableacc\n" + 
      "   on tableassign.signeeid = tableacc.userid left outer join\n" + 
      "   tableinfo\n" + 
      "   on tableassign.signeeid = tableinfo.userid left outer join\n" + 
        " WHERE tableassign.signeedepid =?"; 
    Cursor data = db.rawQuery(selectQuery , new String[]{ signeedep }); 

Fehler:

android.database.sqlite.SQLiteException: near "WHERE": syntax error (code 1): 
, while compiling: select * from tableassign left outer join tableacc on 
tableassign.signeeid = tableacc.userid left outer join tableinfo on 
tableassign.signeeid = tableinfo.userid left outer join WHERE 
tableassign.signeedepid =? 
+4

Versuchen Sie, die letzte "linke äußere Verbindung" zu entfernen – Zachary

Antwort

1

Es scheint, dass Sie eine Kopie/Paste Problem. entfernen Sie die letzten left outer join vor where:

String selectQuery = 
     " select *" + 
     " from tableassign left outer join\n" + 
     "   tableacc\n" + 
     "   on tableassign.signeeid = tableacc.userid left outer join\n" + 
     "   tableinfo\n" + 
     "   on tableassign.signeeid = tableinfo.userid\n" + 
       " WHERE tableassign.signeedepid =?"; 
Cursor data = db.rawQuery(selectQuery , new String[]{ signeedep }); 

Und ich würde es ein bisschen anders formatiert werden, vor allem für die Lesbarkeit:

String selectQuery = 
     " SELECT *\n" + 
     " FROM tableassign\n" + 
     " LEFT JOIN tableacc ON tableassign.signeeid = tableacc.userid\n" + 
     " LEFT JOIN tableinfo ON tableassign.signeeid = tableinfo.userid\n" + 
     " WHERE tableassign.signeedepid =?"; 
Cursor data = db.rawQuery(selectQuery , new String[]{ signeedep }); 
1

Während ich bin nicht sicher genau das, was strukturierte Sprache, die Sie für die Abfragen verwenden, die Problem scheint mit der Verwendung des JOIN-Operators zu sein. Die Oracle-Dokumentation auf LEFT OUTER JOIN zeigt die korrekte Verwendung von ihm, in dem die Syntax lautet:

TableExpression LEFT [ OUTER ] JOIN TableExpression 
{ 
    ON booleanExpression | 
    USING clause 
} 

The final LEFT OUTER JOIN unmittelbar die WHERE-Klausel, ohne eine TableExpression zu definieren. Entfernen Sie die LEFT OUTER JOIN-Klausel, um den Fehler zu entfernen.

String selectQuery = 
      " select *" + 
      " from tableassign left outer join\n" + 
      "   tableacc\n" + 
      "   on tableassign.signeeid = tableacc.userid left outer join\n" + 
      "   tableinfo\n" + 
      "   on tableassign.signeeid = tableinfo.userid" + 
        " WHERE tableassign.signeedepid =?"; 
    Cursor data = db.rawQuery(selectQuery , new String[]{ signeedep }); 
Verwandte Themen