您尝试执行的 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() 函数,导致了语法错误。

解决方案:

  1. 升级 MySQL 版本至 8.0 或更高版本: 如果您的 MySQL 版本低于 8.0,建议您升级到支持 ROW_NUMBER() 函数的版本。

  2. 使用子查询进行排序和筛选: 您可以使用子查询来实现类似于 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 &lt;= #{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 语句以便进一步排查问题。

MySQL 查询语句错误:You have an error in your SQL syntax

原文地址: https://www.cveoy.top/t/topic/okz0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录