You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将c.id =改为c.id IN后MySQL报错,求原因(IN与=子查询疑问)

报错原因及解决办法

把c.id =改成c.id IN后MySQL报错,是因为MySQL语法规则限制:不允许在IN的直接子查询里使用LIMIT子句。而=运算符没有这个限制——毕竟=本来就只接受单个值,MySQL对这类子查询的语法要求更宽松。

原SQL里的子查询虽然加了limit 1确保只返回一行,但IN不支持直接跟带LIMIT的子查询。要解决这个问题,得把带LIMIT的子查询包装成一个派生表(给它加别名,再套一层查询),修改后的代码如下:

Select distinct c.Name As Name
from Candidate c
where c.id IN (
    SELECT t.CandidateId 
    FROM (
        Select CandidateId 
        from Vote
        Group by CandidateId  
        order by count(CandidateId) desc
        limit 1
    ) AS t
)

另外提一句:这个场景用=其实更合适,因为子查询通过limit 1只会返回唯一的CandidateId,用=语义更精准,还不会触发这个语法问题。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:55:22