Hackerrank挑战中的SQL语法错误 - Ollivander的库存

时间:2017-02-20 16:17:06

标签: mysql sql

我正在完成这里详述的挑战: 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

我没有看到任何错误。我错过了什么?

1 个答案:

答案 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

您的查询必须重新考虑,因为至少您有以下问题

  1. 您没有表w,因为您在结果表中使用了相关的选择命名,因此可能

  2. 你指的是w.id,但你的查询中没有w表

  3. 你选择了一个min_coins,但是你没有在主要选择中使用这个列,因此不适用于where /和

  4. w.code列不可用(w表不存在,至少exsite是m表,但你还是没有代码列)

  5. 所以你应该从第一部分开始重建你的查询(from()子句中的subselect)重建你的查询