我正在完成这里详述的挑战: https://www.hackerrank.com/challenges/harry-potter-and-wands
并提出了这个解决方案,但我收到了语法错误消息或我期望的结果。我的代码:
With
m As (Select
w.power,
wp.age,
Min(w.coins_needed) As min_coins
From
wands w Join
wands_property wp
On wp.code = w.code
Where
wp.is_evil = 0
Group By
w.power, wp.age)
Select
w.id,
wp.age,
w.coins_needed,
w.power
From
wands w Join
wands_property wp
On wp.code = w.code
Join m
On m.power = w.power And m.age = wp.age And m.min_coins =
w.coins_needed
Where
wp.is_evil = 0
Order By
w.power Desc,
wp.age Desc,
w.coins_needed Desc
来自hackerrank的错误消息:
ERROR 1064 (42000) at line 1: 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 'm As (Select
w.power,
wp.age,
Min(w.coins_needed) As min_coins' at line 2
我没有看到任何错误。我错过了什么?
答案 0 :(得分:0)
在mysql中你应该使用select from(select ...)而不是
例如
select * from (Select
w.power,
wp.age,
Min(w.coins_needed) As min_coins
From
wands w Join
wands_property wp
On wp.code = w.code
Where
wp.is_evil = 0
Group By
w.power, wp.age) t
......
仔细阅读您的代码:
Select w.id, wp.age, w.coins_needed, w.power
From (Select w.power, wp.age, Min(w.coins_needed) As min_coins
From wands w Join wands_property wp On wp.code = w.code
Where wp.is_evil = 0 Group By w.power, wp.age) m
Join wands_property wp On wp.code = w.code
Join m On m.age = wp.age
And m.power = w.power
And m.min_coins = w.coins_needed
Where wp.is_evil = 0
Order By w.power Desc, wp.age Desc, w.coins_needed Desc
您的查询必须重新考虑,因为至少您有以下问题
您没有表w,因为您在结果表中使用了相关的选择命名,因此可能
你指的是w.id,但你的查询中没有w表
你选择了一个min_coins,但是你没有在主要选择中使用这个列,因此不适用于where /和
w.code列不可用(w表不存在,至少exsite是m表,但你还是没有代码列)
所以你应该从第一部分开始重建你的查询(from()子句中的subselect)重建你的查询