这个SQL查询导致此错误有什么问题?

时间:2014-02-14 18:37:27

标签: java mysql sql join

此查询有什么问题?

" where mh.parent_id = ? "+ (roleIds != null ? " or mh.role_id in (" + roleIds + ")" : "") +

错误讯息:

  

PreparedStatementCallback;来自用户的错误的SQL语法[select u.id,u.user_id,count(distinct pf.id),IfNULL(upm.grievance_autoassign_enable,true)u ur.user_id = u.id left external join user_preference_management upm on u join join user_roles ur u.id = upm.id内连接management_hierarchy mh on mh.child_id = u.id或mh.role_id = ur.role_id left outer join(jbpm4_task jt inner join process_flow pf on pf.pid = jt.execution_id_和pf.grievance_mgmt_id is在jt.assignee_ = u.user_id,其中mh.parent_id =?或mh.role_id in({role_id = 2},{role_id = 4},{role_id = 1},{role_id = 8},{role_id = 38},{role_id = 22},{role_id = 69})group by u.id,u.user_id按次数排序(pf.id)];嵌套异常是com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在'= 2}附近使用正确的语法,{role_id = 4},{role_id = 1},{role_id = 8},{role_id = 38},{role_id = 22 },{role_id = 69})'在第1行

1 个答案:

答案 0 :(得分:0)

问题是您的字符串roleIds,它似乎是JSON表示法。 SQL where..in语句的正确语法将以逗号分隔。

让您的查询看起来更像这样:

 . . . where mh.parent_id = ? or mh.role_id in (2,4,1,8,38,22,69) group by . . .