关于java错误的子查询

关于java错误的子查询,java,postgresql,Java,Postgresql,嗨,伙计们,我试图在java上查询数据库中的access数据,但当我编译时,错误是语法错误在或接近v,当我尝试在postgresql上编译我的查询时,它可以工作,数据可以显示,但当我在eclipse上编译时,它不能 这就是问题所在 @Override protected StringBuffer buildQuery(String sql, Object... objects) { StringBuffer sbSQL = new StringBuffer("SELECT a.maste

嗨,伙计们,我试图在java上查询数据库中的access数据,但当我编译时,错误是语法错误在或接近v,当我尝试在postgresql上编译我的查询时,它可以工作,数据可以显示,但当我在eclipse上编译时,它不能

这就是问题所在

@Override
protected StringBuffer buildQuery(String sql, Object... objects) {
    StringBuffer sbSQL = new StringBuffer("SELECT a.master_user_id, b.name, d.group_name, a.role, "
            + "(SELECT count (v.id) FROM project_member_dtl v "
            + "LEFT JOIN project_timeline p ON v.project_timeline_id = p.id "
            + "LEFT JOIN master_project_dtl j ON p.master_project_dtl_rid = j.rid "
            + "LEFT JOIN master_project aa ON j.master_project_sid = aa.sid "
            + "where ((v.member_plan_date > now()) AND (v.member_real_date IS NULL)) "
            + "AND j.is_freeze = 'n' "
            + "AND p.is_active = 'y' "
            + "AND aa.is_deleted = 'n' "
            + "AND v.master_user_id = a.master_user_id"
            + "AND v.master_role_id = a.master_role_id ) as in_progress, "

            + "(SELECT count (w.id) FROM project_member_dtl w "
            + "LEFT JOIN project_timeline q ON w.project_timeline_id = q.id "
            + "LEFT JOIN master_project_dtl k ON q.master_project_dtl_rid = k.rid "
            + "LEFT JOIN master_project bb ON k.master_project_sid = bb.sid "
            + "where ((w.member_plan_date < now()) "
            + "AND (w.member_real_date IS NULL)) "
            + "AND k.is_freeze = 'n' "
            + "AND q.is_active = 'y' "
            + "AND bb.is_deleted = 'n' "
            + "AND w.master_user_id = a.master_user_id "
            + "AND w.master_role_id = a.master_role_id ) as in_progress_late, "

            + "(SELECT count (x.id) FROM project_member_dtl x "
            + "LEFT JOIN project_timeline r ON x.project_timeline_id = r.id "
            + "LEFT JOIN master_project_dtl l ON r.master_project_dtl_rid = l.rid "
            + "LEFT JOIN master_project cc ON l.master_project_sid = cc.sid "
            + "where (x.member_plan_date IS NULL) "
            + "AND l.is_freeze = 'n' AND r.is_active = 'y' "
            + "AND cc.is_deleted = 'n' "
            + "AND x.master_user_id = a.master_user_id "
            + "AND x.master_role_id = a.master_role_id ) as waiting_list, "

            + "(SELECT count (y.id) FROM project_member_dtl y"
            + "LEFT JOIN project_timeline s ON y.project_timeline_id = s.id "
            + "LEFT JOIN master_project_dtl m ON s.master_project_dtl_rid = m.rid "
            + "LEFT JOIN master_project dd ON m.master_project_sid = dd.sid "
            + "where (y.member_plan_date > y.member_real_date) "
            + "AND m.is_freeze = 'n' AND s.is_active = 'y' "
            + "AND dd.is_deleted = 'n' "
            + "AND y.master_user_id = a.master_user_id "
            + "AND y.master_role_id = a.master_role_id ) as finish_on_time, "

            + "(SELECT count (z.id) FROM project_member_dtl z "
            + "LEFT JOIN project_timeline t ON z.project_timeline_id = t.id"
            + "LEFT JOIN master_project_dtl n ON t.master_project_dtl_rid = n.rid"
            + "LEFT JOIN master_project ee ON n.master_project_sid = ee.sid"
            + "where (z.member_plan_date < z.member_real_date)"
            + "AND n.is_freeze = 'n' AND t.is_active = 'y'"
            + "AND ee.is_deleted = 'n' "
            + "AND z.master_user_id = a.master_user_id "
            + "AND z.master_role_id = a.master_role_id ) as finish_over_time"

            + "FROM project_member_dtl a");

    sbSQL.append("LEFT JOIN master_user b ON a.master_user_id = b.id ");
    sbSQL.append("LEFT JOIN user_group c ON a.master_user_id = c.master_user_id ");
    sbSQL.append("LEFT JOIN master_group d ON c.group_id = d.id  ");

    sbSQL.append(sql);      
    return sbSQL;
}

谢谢,这是个打字错误。确保在每一行的末尾留一个空格

+"AND v.master_user_id = a.master_user_id "
在第一个查询中,您遗漏了一个空格

+"AND v.master_user_id = a.master_user_id"
+ "AND v.master_role_id = a.master_role_id ) as in_progress, "
现在的问题是

...AND v.master_user_id = a.master_user_idAND v.master_role_id =....
SQL引擎认为.master_user_id是一个列。所以下一个v是个问题。这就是错误的原因

在v或v附近出现语法错误


也许可以尝试简化您的查询,缩小问题的范围?这个问题与promefaces无关,因此我删除了标记good spotting!不幸的是,还有更多的地方在这条线的末尾缺少一个空格。