前言
今日在 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 参考博文
若有不足,欢迎指出,开发之路,与君共勉!