MySQL使用union报错

前言

今日在 leetcode 刷 SQL 题的时候,遇到一题需要使用 union 关键字来连接两个子 SQL,结果出现了如下错误
在这里插入图片描述
我第一时间反应就是两个子 SQL 写错了,经过单独对每个子 SQL 进行验证,发现没有问题,就怀疑是 union 导致的错误。
经过查阅资料,参考别的博主的说法,union 的子句不能有 order by 关键字,可是我把 order by 注释掉后,还是出现之前的错误
在这里插入图片描述
当我再把 limit 注释掉时,就没有问题了(以下 SQL 已成功运行,下图中的解答错误只是 SQL 运行时查出的答案不对,不影响举例)
在这里插入图片描述
可是有时候我们遇到的问题就是需要我们在 union 的子句中使用 order by 、limit 这些关键字那?就像我刷到的这道 SQL 题,这该怎么办?
在每个 union 的子句前加括号
在每个 union 的子句前加括号
在每个 union 的子句前加括号
具体如下所示
在这里插入图片描述
SQL代码

(
    select b.name results
    from MovieRating a
    inner join Users b on b.user_id = a.user_id
    group by a.user_id
    order by count(*) desc, b.name
    limit 1
)

union all

(
    select b.title results
    from MovieRating a
    inner join Movies b on b.movie_id = a.movie_id
    where a.created_at like '2020-02%'
    group by a.movie_id
    order by avg(a.rating) desc, b.title
    limit 1
)

哈哈,完美解决,撒花

总结

union 的子句中不可以使用order by、limit 这些关键字,如果一定要用的话,要用括号括起每个子句

参考

链接:leetcode 题目
链接:union 参考博文

若有不足,欢迎指出,开发之路,与君共勉!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值