MySQL 查询语句错误:You have an error in your SQL syntax
您尝试执行的 SQL 语句中存在语法错误,错误信息 "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(PARTITION BY b.id ORDER BY a.create_time DESC) AS rn FROM iw_seaservice_apply a' at line 1" 指示错误发生在 ROW_NUMBER() OVER (PARTITION BY b.id ORDER BY a.create_time DESC) AS rn 这一部分。
错误原因:
MySQL 在 8.0 版本之前不支持使用 ROW_NUMBER() 函数。您使用的语句中使用了 ROW_NUMBER() 函数,导致了语法错误。
解决方案:
-
升级 MySQL 版本至 8.0 或更高版本: 如果您的 MySQL 版本低于 8.0,建议您升级到支持
ROW_NUMBER()函数的版本。 -
使用子查询进行排序和筛选: 您可以使用子查询来实现类似于
ROW_NUMBER()函数的功能。以下是一个示例:
SELECT T.id, T.seaservice_id, T.create_time, T.talent_user_id, T.company_id, T.title, T.pay_amount, T.payment_way, T.currency, T.completion_time, T.sea_service_status, T.service_address, T.talentName, T.applyStatus, T.hasWithdraw
FROM (
SELECT
a.id,
b.id AS seaservice_id,
a.create_time,
b.talent_user_id,
b.company_id,
b.title,
b.pay_amount,
b.payment_way,
b.currency,
b.completion_time,
b.sea_service_status,
b.service_address,
COALESCE(c.short_name_cn, e.realname, e.nickname, e.username) AS talentName,
a.status AS applyStatus,
IFNULL(d.has_withdraw, 0) AS hasWithdraw,
@rn := @rn + 1 AS rn
FROM iw_seaservice_apply a
LEFT JOIN iw_seaservice b ON a.seaservice_id = b.id
LEFT JOIN iw_company c ON b.company_id = c.id
LEFT JOIN iw_seaservice_completion_apply d ON a.id = d.seaservice_apply_id
LEFT JOIN iw_talent_user e ON b.talent_user_id = e.id,
(SELECT @rn := 0) AS init_rn
ORDER BY b.id, a.create_time DESC
) T
${ew.customSqlSegment}
<if test="minPayAmount != null">
AND T.pay_amount >= #{minPayAmount}
</if>
<if test="maxPayAmount != null">
AND T.pay_amount <= #{maxPayAmount}
</if>
<if test="applyStatus != null">
AND T.applyStatus = #{applyStatus}
</if>
<if test="companyName != null and companyName != ''">
AND T.companyName LIKE '${companyName}%'
</if>
WHERE T.rn = 1
ORDER BY T.create_time DESC
注意:
- 以上代码中的
@rn := @rn + 1是一个变量赋值语句,用于生成类似ROW_NUMBER()函数的效果。 - 您需要根据实际情况修改代码中的表名和字段名。
此外,您可能还需要检查 ew.customSqlSegment 变量是否正确设置。
如果您仍然遇到问题,请提供您的 MySQL 版本信息以及完整的 SQL 语句以便进一步排查问题。
原文地址: https://www.cveoy.top/t/topic/okz0 著作权归作者所有。请勿转载和采集!