2014-06-11 51 views
0

查詢時這是非法的情況嗎?查詢返回語法錯誤時的MySQL情況

它返回一個錯誤,告訴我檢查在votes >= (SELECT FLOOR((COUNT(*)/(2 + 1)) + 1) threshold FROM votes) level T附近使用的正確語法。我在MySQL 5.0.83上運行我的數據庫。

SELECT CASE WHEN (
SELECT vote_candidate, MAX(votes_above_the_threshold) votes 
FROM (
SELECT vote_candidate vote_candidate, COUNT(*) votes_above_the_threshold 
FROM vote_orders 
WHERE vote_order = 1 
GROUP BY vote_candidate 
HAVING votes_above_the_threshold >= (
SELECT FLOOR((COUNT(*)/(2 + 1)) + 1) threshold 
FROM votes 
) 
) t 
WHERE votes_above_the_threshold = (
SELECT MAX(votes_above_the_threshold) 
FROM vote_orders 
) 
) votes >= (
SELECT FLOOR((COUNT(*)/(2 + 1)) + 1) threshold 
FROM votes 
) level 
THEN (level - original_votes) 
ELSE 0 
END redistribution 

回答

1

你有幾個問題在這裏:

  • 您選擇兩列標量子查詢 - >只選擇一個你感興趣的
  • 您提供一個別名「票」一個標量子查詢 - >刪除該別名
  • 同樣,你有一個標量子查詢一個「級別」的別名以後 - >刪除此以及

外賣是,標量子查詢SH ould 只能選擇一個值沒有別名

因此,我相信以下是你在找什麼。請注意評論的差異:

SELECT CASE 
    WHEN (
     SELECT MAX(votes_above_the_threshold) votes 
--   ^^^ *NOTE* removed "vote_candidate, " 
     FROM (
      SELECT vote_candidate vote_candidate, COUNT(*) votes_above_the_threshold 
      FROM vote_orders 
      WHERE vote_order = 1 
      GROUP BY vote_candidate 
      HAVING votes_above_the_threshold >= (
       SELECT FLOOR((COUNT(*)/(2 + 1)) + 1) threshold 
       FROM votes 
      ) 
     ) t 
     WHERE votes_above_the_threshold = (
      SELECT MAX(votes_above_the_threshold) 
      FROM vote_orders 
     ) 
    ) >= (
-- ^^^ *NOTE* removed "votes" alias 
     SELECT FLOOR((COUNT(*)/(2 + 1)) + 1) threshold 
     FROM votes 
    ) 
-- ^^^ *NOTE* removed "level" alias 
THEN (level - original_votes) 
ELSE 0 
END redistribution 
+0

顯然,這給了一個新的錯誤:「每一個派生表必須有它自己的別名:......」我試圖讓最後的選擇(SELECT FLOOR ...)的名u,然後我回到了初始錯誤... –

+0

其實 - 這真的是對的。我錯過了一些括號,但現在它返回我想要的值。非常感謝你。 :) –

0

你必須改變這一部分:

WHERE votes_above_the_threshold = (
SELECT MAX(votes_above_the_threshold) 
FROM vote_orders 
) 
) votes >= (

WHERE votes_above_the_threshold = (
SELECT MAX(votes_above_the_threshold) 
FROM vote_orders 
) 
and votes >= (

,這部分是錯誤的:

) level 
THEN (level - original_votes) 
ELSE 0 
END redistribution 

看起來像一個case when缺失,但我我不確定那是什麼在指