【问题标题】:Why am I having an syntax error in my query near "WHERE"? (Multiple tables)为什么在“WHERE”附近的查询中出现语法错误? (多个表)
【发布时间】:2017-12-30 02:36:17
【问题描述】:

我还是新手,这是我第一次使用这些多表查询。为什么我有这样的错误?这是我的代码:

 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 });

错误:

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 =?

【问题讨论】:

  • 尝试删除最后一个“左外连接”

标签: java jquery cursor left-join multiple-tables


【解决方案1】:

您似乎遇到了复制/粘贴问题。删除where之前的最后一个left outer join

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 });

我会稍微改变一下格式,主要是为了可读性:

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 });

【讨论】:

    【解决方案2】:

    虽然我不确定您使用哪种结构化语言进行查询,但问题似乎在于您使用了 JOIN 运算符。 LEFT OUTER JOIN 上的 Oracle 文档显示了它的正确用法,其中语法为:

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

    最后的 LEFT OUTER JOIN 紧接在 WHERE 子句之前,没有定义 TableExpression。删除 LEFT OUTER JOIN 子句以消除错误。

     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 });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      相关资源
      最近更新 更多