对于复杂sql执行时报错信息:
com.alibaba.druid.sql.parser.ParserException: syntax error, error in :' tmp as ((', expect RPAREN, actual LPAREN pos 31, line 1, column 14, token LPAREN
首先报错sql放到mysql8.0执行是ok的。但是在程序里报错。说明是解析sql时有问题导致生成的sql执行出现问题。问题就出现druid数据库连接池过滤器发现一些关键字,或者保留关键字没做引号标注,会报异常。
具体的sql及其报错信息如下。
merge sql error, dbType mysql, druid-1.1.21, sql : with tmp as (
(
select cvi.id as virtualClassId,
cvi.start_time as startTime,
cvi.student_user_id as id,
usi.real_name as name,
1 as classType,
ce.id as editionId,
ci.course_name as courseName,
cl.unit_no as unitNo,
cl.unit_lesson_no as unitLessonNo,
cvi.feedback_status as feedbackStatus,
cvi.teacher_attend_status as teacherAttendStatus
from classroom_virtualclass_info cvi
inner join finance_classroom_audit fca on fca.virtual_class_id = cvi.id
inner join user_student_info usi on cvi.student_user_id = usi.id
inner join course_lesson cl on cvi.lesson_id = cl.id
inner join course_info ci on cl.course_id = ci.id
inner join course_edition ce on ci.course_edition_id = ce.id
where cvi.tutor_user_id = ?
and cvi.start_time >= ?
and cvi.start_time <= ?
and cvi.remove = 0
and cvi.status in (3, 4)
and fca.remove = 0
and fca.class_type_id = 1
)
union all
(
select svi.id as virtualClassId,
svi.start_time as startTime,
svi.class_id as id,
sci.class_name_zh as name,
2 as classType,
ce.id as editionId,
ci.course_name as courseName,
cl.unit_no as unitNo,
cl.unit_lesson_no as unitLessonNo,
svi.feedback_status as feedbackStatus,
svi.teacher_attend_status as teacherAttendStatus
from smallclass_virtualclass_info svi
inner join finance_classroom_audit fca on fca.virtual_class_id = svi.id
inner join smallclass_class_info sci on svi.class_id = sci.id
inner join course_lesson cl on svi.lesson_id = cl.id
inner join course_info ci on cl.course_id = ci.id
inner join course_edition ce on ci.course_edition_id = ce.id
where svi.tutor_user_id = ?
and svi.start_time >= ?
and svi.start_time <= ?
and svi.remove = 0
and svi.status in (3, 4)
and fca.remove = 0
and fca.class_type_id = 1
)
)
select tmp.*
from tmp as tmp
order by tmp.startTime desc LIMIT ?
com.alibaba.druid.sql.parser.ParserException: syntax error, error in :' tmp as (