2017-02-20 23 views
0

我工作throught挑戰這裏詳述: https://www.hackerrank.com/challenges/harry-potter-and-wandsSQL語法錯誤 - 奧利凡德的庫存

,並想出了這個解決方案,但我得到一個語法錯誤消息,而不是或結果我期待。我的代碼:

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

我不確定MySQL支持cte的? – jarlh

+1

@jarlh是正確的,MySQL沒有'WITH'。 – Barmar

回答

0

在MySQL中,則應該使用(選擇...)一個選擇,而不是與

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 

您查詢必須rethinked因爲至少你有以下問題

  1. 您沒有表W¯¯,因爲你已經使用了相關的選擇命名米結果表因此可能會

  2. 你指的是w.id,但在查詢中還沒有AW表

  3. 你是選擇一個min_coins但你沒有這個列在主要選擇,所以不可用於where /和子句

  4. w.code列不可用(w表不存在,至少exsite米表,但你無論如何都不要碼列)

所以你應該從第一部分(from()子句中的子選擇)重建你的查詢重建你的查詢

+0

我明白了。雖然我已經修改了代碼的東西還是不太對勁 '選擇 w.id, wp.age, w.coins_needed, w.power 從 (選擇 w.power, wp.age, 分鐘(w.coins_needed)作爲min_coins 從 魔杖瓦特加入 wands_property WP 在wp.code = w.code 其中 wp.is_evil = 0 組按 w.power,wp.age)米 加入wands_property wp On wp.code = w.code 加入中號 在m.age = wp.age而m.power = w.power而m.min_coins = w.coins_needed 其中 wp.is_evil = 0 順序按 w.power說明, wp.age說明, w.coins_needed Desc' – Anthony

+0

我已經更新了一些建議的答案..希望是有用的 – scaisEdge