You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PDOException SQLSTATE[42000]语法错误求助:MySQL 1064错误排查

解决你的MySQL语法错误问题

这是个典型的SQL语法结构错误,我帮你拆解下问题所在,再给出修正方案:

错误核心原因

你把过滤条件AND Sold = 0直接放在了FROM子句的子查询闭合括号后面,这不符合MySQL的语法规则——在表连接/子查询之后,过滤条件必须通过WHERE关键字声明,而且你还漏给FROM里的子查询加别名(MySQL要求子查询必须有别名才能被引用)。

修正后的完整SQL

select * 
from (
    numbers t 
    inner join (
        select distinct n.Number 
        from ( 
            select 1 start union all select 2 union all select 3 union all select 4 union all select 5 
        ) s 
        cross join numbers n 
        where left(substring(n.Number, s.start, 2), 1) <> right(substring(n.Number, s.start, 2), 1) 
          and n.Number like concat( '%', substring(n.Number, s.start, 2), substring(n.Number, s.start, 2), substring(n.Number, s.start, 2), substring(n.Number, s.start, 2), '%' )
    ) n on n.Number = t.Number
) AS temp_table -- 给子查询添加别名,MySQL强制要求
WHERE temp_table.Sold = 0 -- 用WHERE关键字声明过滤条件,明确字段所属的子查询
ORDER BY Date DESC, Count DESC, Price ASC;

额外实用建议

  • 写复杂嵌套SQL时,一定要分层格式化,能快速发现括号不匹配、语法错位的问题;
  • 所有字段尽量加上表/别名前缀,避免字段歧义(比如temp_table.Sold比直接写Sold更清晰);
  • 遇到语法错误时,可以先把嵌套的子查询单独拿出来执行,逐步排查问题点,比直接看整段SQL高效得多。

内容的提问来源于stack exchange,提问作者Not Sure

火山引擎 最新活动